第三周总结

发布于:2023-01-19 ⋅ 阅读:(296) ⋅ 点赞:(0)

1.局部变量和成员变量的区别?

     1)书写位置不同:
        成员变量:类中,方法外!
        局部变量:方法定义中,或者方法声明上
     2)内置中的位置不同
        成员变量:堆内存中,和对象有关系
       局部变量:栈内存中,和方法有关系
    3)生命周期不同:
       成员变量:随着对象的创建而存在,
                       随着对象的创建完毕等待jvm的垃圾回收器空闲 时候回收而消失
       局部变量:随着方法的调用而存在,
                       随着方法调用结束而消失;
    4)初始化值不同:
        成员变量:是可以不初始化的,需要通过对象名来赋值,存在默认初始化;
        局部变量:必须在使用之前初始化,否则报错;

2.什么时候把一个定义为成员变量的时机?

如果一个类能够描述这个事物的属性,必须为定义成员变量;否则,都定义为局部变量;

3.简述this关键字,它的作用是什么?

     this是当前当前类对象的地址值引用.

    作用:为了区分  局部变量隐藏了成员变量,使用this加以区分.

    this.成员变量名 = 局部变量名;

    或者通过有参构造方法赋值.

4.什么是构造方法?目的是什么?

   构造方法:方法名和类名相同

                  没有返回值类型

                  没有void

    目的:为了给类的成员进行数据初始化; 

    注意事项:

         如果没有任何构造方法,系统会默认提供无参构造方法

         如果给出了有参构造方法,系统不会再提供无参构造方法,建议永远给出无参构造方法.

5.请简述匿名对象以及好处?

     new 类名();

    匿名对象:没有名字的对象

    好处:

       节省内存,没有栈内存,直接在堆内存中开辟空间,使用完成后立即被垃圾回收器回收.

   一般情况:匿名对象使用一次即可,这样不需要过多的去开辟堆内存空间,直接被回收;

6.方法的形式参数如果是引用类型,那么实际参数该如何传递?

      1)方法的形式参数如果是基本类型,调用该方法的时候,实际参数需要传递对应数据值即可;
 
      2)方法的形式参数是引用类型:数组,类,接口,实际参数在进行传递需要传递当前数组对象 /类的对象/接口的对象.   new  :创建实例(堆内存开辟空间:空间地址值)

7.封装是什么?java中封装的体现有哪些?请举例说明。

      封装是一个类中的成员变量需要对外隐藏,被private所修饰,为了保证数据的安全性,对外需提供公共的访问方法  setXXX()/ getXXX()

    体现:将成员变量进行私有化,隐藏成员方法;

8.给成员变量赋值的方式?

      通过set()方法;

      通过自定义方法;

      通过构造方法来赋值;(默认是无参)

9.在一个标准类中,如果只给出了有参构造,创建该类对象的时候使用无参构造创建,

                    会出现什么问题,如何解决?

       方式一:手动给出无参数构造方法;

       方式二:假设人家现在不需要你给出父类的无参构造方法,就需要让子类的构造方法显示的访问                      父类的有参构造方法.

                   这样需要使用关键字super:代表父类空间标识(代表父类对象的地址值引用)

                    super()---访问父类的无参构造方法

                    super(XXX)-----访问父类的有参构造方法

                    这些中super一定是子类构造方法中的第一句话.

       方式三:保证子类的所有构造方法中的某一个构造方法,让父类初始化完毕即可;

                   先通过子类的无参构造方法-----this(XXXX):访问本类(子类)的有参构造方法;

                  在子类的有参构造方法的第一句,让父类初始化super(XXX):间接访问父类的有参构造方法;

       子类继承父类,一定要先执行父类的构造方法,初始化完毕之后才能执行子类的构造方法----分层初始化.

10.什么是继承,继承的好处?继承的特点

       继承:将多个类的共性内容抽取出来,放在一个独立的类中,让这个独立的类和其他的类产生一种 关系.

        好处:

               可以提高代码的复用性

              可以提高代码的维护性,后期便于维护,针对子类和父类进行维护.

              类与类产生的继承关系,是后面多态的前提条件.

      特点:

             继承是单继承,不支持多继承

             继承支持多级继承

             顶级父类是Object类,所以每个类都会默认继承Object类

           子类和父类是一对相对概念

    在Java中有一个开发原则 "低耦合,高内聚"(以后所有的Java设计模式都需要遵循这一个原则)
              耦合性:开发中是永远避免不了,可以降低(耦合:类和类的关系)
              内聚性:指的是某个类完成某个功能的一种能力; 尽量不要产生继承关系来完成一个功能,一个类能完成一个类完成;
              低耦合:降低耦合性,减少类和类的关系;

关于的注意的问题:
      1.子类继承父类,对于非私有的成员,直接可以继承过来,但是如果私有成员,它可以通过公共的访问可以访问,但是直接访问的;
      2.被私有修饰的东西(成员变量/成员方法),只能在当前类访问的;

11.静态代码块,构造代码块,构造方法的优先级.

            静态代码块(只执行一次) > 构造代码块  >  构造方法

12.static关键字的特点

         随着类的加载而加载,优先于对象存在

         不能和this共存

         本身概念:共享共用,多个对象共用某个静态的东西

         访问方式:类中静态的东西------"类成员"推荐使用类名访问.

                    类名.变量名

                    类名.方法名()

         静态只能访问静态;

          静态方法中只能访问静态变量
          静态方法只能调用静态方法;
         非静态方法皆可以访问静态的东西也可以访问非静态的东西;
 

13.子类继承父类,构造方法如何访问呢?

         子类继承父类,子类的所有构造方法默认访问父类的无参构造方法;

         实际开发:写代码的时候

                子类继承父类:

                       子类的无参构造方法-------默认父类无参

                       子类的有参构造方法-------直接访问父类有参构造方法

14.什么是代码块?

             代码块:     使用{}括起来的内容
    分类:
            局部代码块,就是在方法定义中使用{}
                 {},作用:就是限定局部变量的生命周期
         构造代码块:---在类的成员位置定义的{},它有特点:在执行构造方法之前,如果类中有构造代块,
          优先执行构造代码块,作用:也可以给类的成员的数据进行初始化; (实际开发很少见到构造代码块)
          只要执行构造方法,如果存在构代码块,它必须优先执行,然后才是构造方法...
          静态代码块:
           类就加载一次,静态代码块也就执行一次!
                格式
                         static{ --->跟静态相关的都和类有关系,随着类的加载而加载;
 
                          里面书写代码
                      }
 
                      静态代码块,构造方法,构造代码块
                      优先级:静态代码块 > 构造代码块> 构造方法,而且每次执行构造方法之前,优先执行所有的构造构造代码块;

15.文档说明书

         对ArrayTool.java文件产生一个文档说明书---类似于API(Application Programming Interface:应用程序接口文档)
       使用jdk安装目录里面的bin里面: javadoc.exe 指令  产生文档说书的指令
 
         1)将ArrayTool这个java文件代码复制到本地某个磁盘上,类名和文件名称一致(先不要把package复制上去)
          2)打开dos窗口,进入到这个java文件的路径下      (找到这个java文件后,这个类权限保证访问权限足够大:public)

          3)会用javadoc  -d 目录名称 -author -version ArrayTool.java(java源文件带后缀)  产生文档说明书.

16.什么是多态,多态的成员访问特点.

     多态是某一个事物,在不同时刻表现出来的不同状态.
     前提条件:有继承关系
                     存在方法重写
                    由子类指向父类:Fu  fu = new Zi();
     成员访问特点:
              成员变量:编译看左边,运行看左边
              成员方法:编译看左边,运行看右边
              静态方法:编译看左边,运行看左边
              构造方法:分层初始化,先执行父类初始化,在执行子类初始化.
   针对多态的向下转型,前提必须有向上转型(父类引用指向子类对象)

   但是,写代码的时候,心中要留意内存的中的变化,否则会出现一种 "异常" ;
17.静态变量和成员变量的区别.
     所属范围不同:静态变量属于类范围,成员变量属于对象范围.
    存活时间不同:静态变量会一直伴随着类,而成员变量随着对象的产生而产生,随对象的消亡而亡.
    存储位置不同:静态变量存储在方法区的静态区,成员变量存储在堆内存区.
    访问方式不同:静态变量是  类名.变量名;
                         成员变量是   对象名.变量名;

18.final关键字的特点

    final:不可改变.可以用于修饰类,方法和变量.
    类:被修饰的类,不能被继承.
    方法:被修饰的方法,不能被重写.
    变量:被修饰的变量,不能被重新赋值.
19.多态的弊端是什么?如何解决.
        不能访问子类的特有功能.
        解决方案
                 创建具体的子类对象    Zi  zi  =  new  Zi();  
                  不好:需要重新开辟内存空间,消耗内存空间.
                 向下转型     Zi  z  =  (Zi)fu;//符号强转
                 z.特有功能().

                 不需要单独去开辟内存空间.

20.什么是方法重写?

         方法重写指的是两个方法的返回值.方法名和参数的类型,个数都相同.(子类重写父类的方法)
21.什么抽象类?
         在一个类中,如果有抽象方法,这个类必须为抽象类
 
         有抽象方法的类一定是抽象类,否则编译就会报错!   
     
         抽象类中一定都是抽象方法吗?  不一定,抽象类中可以存在抽象方法,也可以存在具体方法

         抽象的方法的格式:

                  根据写方法的格式一样,加入一个关键字abstract,而且没有方法体{}

                        public abstract 返回值类型 方法名(空参/带参) ;

      抽象类的特点:

              1)不能实例化 (不能创建对象)

             2)必须强制子类完成事情:必须将抽象方法重写!

      抽象类的子类:

                  如果子类是一个抽象类,  没有意义(抽象类new不了) (前提条件是这个子类没有它的子类)
                 研究的抽象类的子类一定会有一个具体类,这个时候通过具体类才能创建对象;

                 抽象的父类名  对象名  = new 具体的子类名() ;  抽象类多态
22.抽象类的成员特点:

       成员变量:抽象类的成员变量既可以有变量,也可以是自定义常量被final

      成员方法:抽象类中既可以有抽象方法,也可也有非抽象方法

      构造方法:
                    既可以定义无参/有参构造方法...

                    存在抽象类多态,有继承关系,初始化的时候,构造方法----分层初始化---->先父类初始化,子类初始化
 
23. 如果有一个类没有任何的抽象方法,还要将这个类定义为抽象类的意义?

     意义:意义就是不能让它new,它如何实例化呢?肯定有具体的子类,进行抽象类多态来操作..

             设计代码(设计层面)
24.abstract 和那些关键字冲突

           和private关键字冲突:因为被private私有的成员方法只能在本类访问,而abstract修饰的成员
方法必须强制子类重写,已经超出来的当前类的范围;

           和final也冲突,被final修的成员方法,不能被重写;而抽象方法强制子类必须重写;

          和static也冲突,abstract修饰的方法必须被子类重写,而static修饰的方法,算不上抽象,直接跟类
相关的;

          a bstract关键字 应用范围: 定义在类上---抽象类

                                                    定义在方法上----抽象方法

                                                     public abstract  返回值类型 方法名(空参/带参...)  ;

                                                    abstract 返回值类型 方法/名(空参带参...)  ;
              子类继承父类,子类重写父类的抽象方法,必须保证访问权限足够大,要么加public要么跟父          类的方法保持一致!
                否则报错;
 
25.多态的好处:

          1)提高代码的复用性,由继承保证的

          2)提高代码的扩展性,由多态保证 : 父类引用指向子类对象
26.什么是接口?

       接口体现的是事物的一种额外功能 ;

       设计理念:  体现的是一种  "like a"的关系
       java编码中,体现这些事物本身不具备的功能,要经过一些特殊的实现才能具备功能-----称为 "接
口"---关键字 interface

          格式的写法
                   interface  接口名{      命名规范和类名命名一样,见名知意 "大驼峰命名法"
                          只能为抽象方法
                   }
 
                  接口的子类----"子实现类"
                              实现
                  class 子类名  implements  接口名{
 
 
                 }
                       接口比抽象类还抽象---->特点:不能实例化

27.如果在使用多态时出现ClassCastEXception,说明什么?

     属于运行时期异常的一种,代表"类转换异常".

     使用多态操作向下转型的时候(使用不当),堆内存中信息和栈内存信息没有子父关系.

28.接口的成员特点:


        1)成员变量:只能是常量,存在默认修饰符 :public static final
        2)成员方法:只能是抽象方法,存在默认修饰符  public abstract
        3)构造方法:没有构造方法的---通过子实现类的构造方法来实例化

       接口本身意义:对外暴露这些功能,让子实现类实现 !

29.关于面向对象中牵扯关系问题:    

      Java中最基本的单元是类.
      类和类:继承关系 extends,Java语言中只支持单继承,不支持多继承,但是可以多层继承
      类和接口: 实现关系 implements;一个类继承另一个类的同时,可以实现多个接口
      接口和接口:继承关系:extends   不仅支持单继承,也可以多继承!