A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马赛   /  2015-11-30 21:14  /  1934 人查看  /  29 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

哎呀,大神的节奏啊
回复 使用道具 举报
感谢分享!!
回复 使用道具 举报
第八天的
一、代码块
    有三种:
        1、局部代码块
            方法体里,for循环里的大括号就是一个局部代码块
  1. public static void main (String[] args){
  2.                 {
  3.                     int num = 100;//作用域在大括号里边,使用后立即释放
  4.                 }
  5.             }
复制代码

2、构造代码块
            类里方法外,每次new一个对象,就执行一次
  1.   class ClassA{
  2.                 {
  3.                     System.out.println("构造代码块");
  4.                 }
  5.                 public ClassA(){
  6.                
  7.                 }
复制代码

3、静态代码块
            在类加载的时候加载到方法区里的静态区,只执行一次
  1. class ClassB{
  2.                 static{
  3.                     System.out.println("静态代码块");
  4.                 }
  5.             }
复制代码
       代码块可以使用非正式的模拟数据进行对代码的测试
  1. class BlockDemo{
  2.         static int[] scores = new int[3];
  3.         //使用静态代码块对数组进行初始化
  4.         static {
  5.                 score[0] = 20;
  6.                 score[1] = 30;
  7.                 score[2] = 40;
  8.         }
  9.         public static void main(String[] args){
  10.                 print(scores);
  11.                 int index = getIndex(scores);
  12.                 System.out.println("获得的角标是:"+i);
  13.         }
  14.         //定义一个数字遍历方法
  15.         public static void print(int[] arr){
  16.                 for(int i = 0; i<arr.length; i++){
  17.                         System.out.print(arr[i]);
  18.                 }
  19.                 System.out.println();
  20.         }
  21.         //定义一个数组角标查询方法
  22.         public static int getIndex(int[] arr){
  23.                 int index = -1;
  24.                 for(int i = 0; i<arr.length; i++){
  25.                         if(arr[i] == 30){
  26.                                 index = i;
  27.                         }
  28.                 }
  29.                 return index;
  30.         }
  31. }
复制代码

二、继承(重点,难点)
    多个类具有相同属性和行为,将这些相同的属性和行为封装到另外一个类中,可以使代码的工作量减少,同时
    也利于对代码的维护。
    继承的语法
        class 子类名 extends 父类名
        父类可以叫做基类,也可以叫做超类
        子类可以叫做派生类
        子类在继承父类公有属性和方法的同时自己还可以扩充属于自己的属性和方法
        通过老师、学生和人来演示
  1. //老师类和学生类具有一些共同的属性和方法,这些属性和方法定义在了人类里
  2.     class Person {
  3.         // 人类具有的属性(老师和学生同时也具有的属性)
  4.         String name;
  5.         int age;

  6.         // 构造方法
  7.         public Person() {

  8.         }

  9.         public Person(String name, int age) {
  10.                 this.name = name;
  11.                 this.age = age;
  12.         }

  13.         // 成员方法
  14.         public void eat() {
  15.                 System.out.println("吃饭");
  16.         }

  17.         public void sleep() {
  18.                 System.out.println("睡觉");
  19.         }

  20.         // set,get方法
  21.         public void setName(String name) {
  22.                 this.name = name;
  23.         }

  24.         public String getName() {
  25.                 return this.name;
  26.         }

  27.         public void setAge(int age) {
  28.                 this.age = age;
  29.         }

  30.         public int getAge() {
  31.                 return this.age;
  32.         }
  33.         
  34.         }
  35.         //定义一个学生类,学生类继承person类
  36.     class Student extends Person {
  37.         private String number;//学生特有的属性
  38.         public Student(){
  39.                
  40.         }

  41.         public Student(String name, int age, String number) {
  42.                 super(name,age);
  43.                 this.number=number;        
  44.         }

  45.         public void study() {//学生特有的学习方法
  46.                 System.out.println("学习");
  47.         }
  48.         public void setNumber(String number){
  49.                 this.number = number;
  50.         }
  51.         public String getNumber(){
  52.                 return number;
  53.         }
  54.     }
  55.         //定义一个老师类
  56.     class Teacher{
  57.         private double salary;//老师特有的属性
  58.         public Teacher(){
  59.         
  60.         }
  61.         public Teacher(String name, int age, double salary){
  62.                 super(name,age);
  63.                 this.salary = salary;
  64.         }
  65.         public void teach(){//老师特有的授课类
  66.                 System.out.println("老师上课");
  67.         }
  68.         public void setSalary(String salary){
  69.                 this.salary = salary;
  70.         }
  71.         public String getSalary(){
  72.                 return salary;
  73.         }
  74.     }

  75.    
  76.     /*运行类*/
  77.     class ExtendsDemo{
  78.         public static void main(String[] args){
  79.                
  80.         }
  81.     }
复制代码

    继承有优点也有缺点
        优点:节省代码量,便于维护和代码的复用
        缺点:耦合性强

    如果父类和子类中的成员变量名相同了,就要使用this和super来调用成员变量
  1. class A {
  2.         int num = 30;
  3.     }
  4.                         
  5.     class B extends A {
  6.         int num = 20;
  7.                                 
  8.         public void method() {
  9.                 int num = 10;
  10.                 System.out.println(num);// 10
  11.                 System.out.println(this.num); // 20
  12.                 System.out.println(super.num); // 30
  13.         }
  14.    }
复制代码

    继承可以多层继承,但是不能多重继承,即:可以 class A extends B extends C{} 但是不能 class A extends B,C{}
   子类只能继承父类的非私有成员,子类不能继承父类的构造方法,但是可以通过super关键字访问父类构造方法
   子类构造方法在初始化的时候,要先初始化父类的构造方法,然后再做子类的构造方法
   当几个类存执 a is b的结构时才可以使用继承机制,不能说两个类都有同一个名字的方法就要用继承机制
   比如猫和手机都有玩游戏的方法,但是它们之间没有a is b的关系,所以不能使用继承机制
   在一个子类中访问一个变量
       1.现在子类局部范围找
       2.在子类成员范围找
       3.在父类成员范围找,不能在父类局部范围里找
       4.如果没有就会报错
   继承中一个内容,方法的重写,和之间学过的方法重构还是有区别的
   如果子类和父类中有相同名字的一个方法,子类如果向要扩充或改写此方法,就需要用到方法的重写
   重载是针对于一个类中方法的
        方法名字定义成一个是方便程序员使用,但是根据参数的方式自行匹配               
   重写是针对于继承机制中的多个类的方法
   重写的目的,对父类的代码进行扩展,或者变化特别大完全覆盖        

        先弄这么多,好多东西还没弄明白,看视频了

回复 使用道具 举报
看了一遍,复习一遍-。-准备入学面试中
回复 使用道具 举报
感谢分享
回复 使用道具 举报
不错,加油加油!
回复 使用道具 举报
真是厉害啊
回复 使用道具 举报
第九天这几天面向对象,抽象内容比较多,有点不知道该如何着手去学习这一块, 各位有什么好的方法不妨说一下,也是和大家分享交流

这是昨天的课程了,今天休息一天,昨天上课的时候,刚开始讲父类引用指向子类对象的时候,怎么也听不进去,吸收不了知识,因为我总在想到底为什么访问变量要看左边,访问方法要看右边,总是想不通内存图里怎么走的,感觉要一点都学不下去似的,后来我也不想了,然后就死记这个结论,还算可以,能够在遇到此类的问题的时候,知道该看哪里运行哪里编译,然后就是感觉,现在的话想要把什么都弄明天有点不现实,时间和精力都不允许,所以,能快速吸收消化的就赶紧吸收了,不要因为纠结那么一点点为什么,把其他的知识点扔一边不去管,这也算是昨天上课的一点感悟吧。然后下边是昨天的总结,感觉自己语言组织能力太差了,光靠自己想东西来总结有点头疼,而且脑子会很空,所以参考着老师的总结写完了,相当于又复习一遍吧
一、多态
        多态就是一个事物有多种状态,比如(水:液态、固态、气态)
        多态的三个前提:
                1.有继承关系
                2.方法重写
                3.父类引用指向子类对象
        父类引用指向子类对象:
                1.访问变量:编译看左边,运行看左边
                2.访问成员方法:编译看左边,运行看右边
                3.访问静态方法:编译看左边,运行看左边
                调用静态方法:可以通过类直接访问,也可以通过
                对象访问,但本质是类名访问,所以调用静态方法
                不存在多态,这个是一个假象。静态方法不算方法的重写
        类型提升:
                向上提升:小类型向大类型转换,父类 对象名 = new 子类();
                向下转型: 父类引用上进行强制转换,子类 对象名 = (子类)父类对象名;
        类型提升解决了多态的弊端,父类不能访问子类的独有的方法
        多态的好处和弊端:
                1.提高代码的维护性,由继承保证,大量的代码写在了父类中
                2.提高程序扩展性:由多态保证
                3.多态中父类不能访问子类中独有的方法
二、抽象类
        抽象abstract,不是具体的一个物体,属于一类,要用抽象类来定义,在以后的工作中要考虑是
        用抽象还是普通类
        抽象类的注意事项:
                有构造方法,不能进行实例化,要由具体的子类实例化,用多态实现
                抽象类不一定有抽象方法,但是有抽象方法的类一定是抽象类
                抽象类的成员:成员变量可以是变量,也可以是常量
                                成员方法:可以是普通方法,也可以是抽象方法
                抽象类的子类可以有两种,一种可以是抽象类,一种可以是普通类,但是普通类要重写父类里的抽象方法
        抽象类也可以有父类
        abstract不能和哪些关键字一起用?
                1.private:抽象类,希望别人实现方法,被private修饰会冲突
                2.final:被final修饰以后不能重写方法
                3.static
三、接口
        接口 interface,可以给一个类提供而外的功能,使用 implement 实现接口,也算是对继承只能单继承弊端的一个解决方法
        接口中的成员只能是常量和抽象方法,要实现接口就要全部实现抽象方法
        接口是能力的扩展,不会对本质产生影响
        比如一个门,可以在门的基础上添加门铃,门铃就可以看作是对门能力的扩充,门铃就是一个接口
        接口的注意事项:
                接口主要是对能力的扩充,没有new构造方法
                定义的变量在接口里会变成常量,所以标识符所有字母都要大写,有个隐藏的 public static final
        java源码中很多都是用接口来写的,因为java不受行业约束
        类和类的关系:
                继承关系,只能单继承,不能多继承,能多层继承,不能多重继承
        类和接口的关系:
                实现关系,类来实现接口的方法,单实现也可以多实现
        接口和接口的关系:
                可以继承,多继承(没有讲)
        抽象类和接口关系:
                实现接口
        抽象类可以有变量、常量、成员方法、抽象方法
        接口只能有常量和抽象方法


第九天ppt和总结


Day_09.rar

392.05 KB, 下载次数: 22

回复 使用道具 举报
第五天
第五天讲的是一维数组和二维数组,当时学完二维数组以后做了杨辉三角题目,课上自己想没有想出来,然后老师讲课的时候我有点走私,还在自己想怎么做,以至于后来老师解析完这道题,我还是没弄懂,到晚自习结束我也没心思弄这道题,后来回宿舍,十一点多的时候舍友说看一下杨辉三角,然后我说我也看一下,结果突然就想明白了,然后当时就能自己把代码写出来,我想说的有2点,一个是上课老师讲课一定要认真听,然后就是有不会的不要急,先缓一下,没准什么时候就突然开窍了,当然不能耽误太长时间
第五天内容总结,其实像这种数字类的知识,多想想就明白了,但是面向对象讲的是思想,真的是不好弄明白
一、数组(重点、难点、掌握)
        什么叫做数组:用来装一堆相同数据类型数值的容器叫做数组
        一维数组格式:
                数组类型[] 数组名(一般用这种格式)
                数组类型 数组名[]
        动态初始化
                数组类型[] 数组名 = new 数组类型[m];
                动态初始化定义了数组的长度,但是没有定义数组内容,系统会给数组分配默认值
                        int类型的默认值是0
                        浮点型默认值 0.0
                        char类型默认值 "\u0000"
                        String默认值 null
                        boolean默认值 false
        静态初始化
                数组类型[] 数组名 = {数据1, 数据2, 数据3, 数据4, 数据5}
                静态初始化给出了数组里边的内容,系统会自动判断数组长度
        获得数组长度的方法:
                数组名.length
        数组即可以存储基本数据,也可以存储引用数据
        通过数组引出来内存中 栈、堆和方法区(面向对象讲)
                栈内存:用来存储局部变量
                堆内存:用来存储new出来的对象
        数组在内存中是通过数组在内存中的地址来进行指向的
二、二维数组(理解)
        二维数组的格式
                数组类型[][] 数组名
                数组类型 数组名[][]
        二维数组动态初始化
                有2种
                数组类型[][] 数组名 = new 数组类型[m][n]
                数组类型[][] 数组名 = new 数组类型[m][]
                m代表二维数组最外边的大括号,表示行,包含n
                n代表二维数组里边的大括号,表示列,被m包含
                int[][] arr = new int[m][n];
                表示int数组类型的arr,里边有m个一维数组,每个一维数组有n个数据
        二维数组静态初始化
                数组类型[][] 数组名 = new 数组类型[][]{{},{}};
                数组类型[][] 数组名 = {{1,2,3,4},{3,4},{3},{2,3}};        
        注意:静态初始化数组,大括号后边有一个分号
                还可以这样
                int[ ][ ] arr = new int[3][ ];
                arr[0] = new int[2];
                arr[1] = new int[3]
                arr[2] = new int[1];

        

Day_05.rar

319.64 KB, 下载次数: 22

回复 使用道具 举报
不错不错
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马