有继承情况下的初始化

Posted daidai66

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有继承情况下的初始化相关的知识,希望对你有一定的参考价值。

类初始化

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

实例初始化

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

类初始化和实例初始化

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

以上是关于有继承情况下的初始化的主要内容,如果未能解决你的问题,请参考以下文章

[知了堂学习笔记]_初始化顺序

[Java] 类的初始化步骤

Swift类构造器的继承和重写

在 C++ 中指定初始值设定项的情况下的模板参数推导

Java基础:初始化和清理

Python菱形继承的初始化问题和继承顺序