有继承情况下的初始化

类初始化

  • 类初始化是执行<clinit>()方法,它的代码由两部分组成:
    • (1)静态变量的显式赋值
    • (2)静态代码块
    • 它俩是按照编写的顺序组装而成
  • 每一个类的类初始化方法只会执行一次
  • 子类初始化时会先检查父类,如果父类还没有初始化,会先完成父类的初始化,即先执行父类的<clinit>()方法

实例初始化

  • 一个类可能会有1~n个的<init>方法,有几个看声明了几个构造器
  • 实例初始化是执行对应的<init>方法,具体执行哪个,看new后面调用的是哪个构造器
  • 实例初始化由一下四个部分组成:
    • ①super()或super(实参列表)==>调用父类的对应的实例初始化方法,说明创建子类对象时,也会导致父类的实例初始化方法执行的
      • 其中super()或super(实参列表)是原先写在构造器首行的
    • ②实例变量的显式赋值
    • ③非静态代码块
    • ④构造器中的代码
      • 其中②和③是按代码中编写的顺序组装,①和④是一头一尾
  • 实例初始化,每次new对象时执行,new一个执行一个

类初始化和实例初始化

如果第一次使用某个类时就是在创建对象,那么要先完成类初始化,然后再执行实例初始化

猜你喜欢

转载自www.cnblogs.com/daidai66/p/11992967.html