Java静态变量、inline初始化的实例变量,显示与隐式调用构造器的执行顺序
- 所有依赖路径的类(包括父类与子类)加载,类变量初始化和静态代码块执行,注意一个类只会被加载一次,顺序如下:
- 加载父类,其中类加载过程中类变量和静态变量的顺序如下:
- 静态变量
- 静态代码块
- 加载子类,顺序同上
- 加载父类,其中类加载过程中类变量和静态变量的顺序如下:
- 实例变量初始化与构造器调用,先执行父类,再执行子类,注意每次新建类的实例时都会完整执行一遍
- 父类实例变量初始化与构造器
- 父类inline实例变量初始化过程
- 父类构造器,如果子类被调用到的构造器中通过super()或者super(param)显式调用了父构造器,则执行被调用的构造器,否则执行空构造器
- 子类实例变量初始化与构造器
- 子类inline实例变量初始化过程
- 子类构造器调用,被调用哪个就执行哪个,除非显式调用this(),否则不会调用子类的空构造器
- 父类实例变量初始化与构造器
因此,反直觉的是,反而是调用到的子类的构造方法,最后被执行
网友评论