java父类、子类构造函数调用过程
java父类、子类构造函数调用过程
由此看出java类初始化时构造函数调用顺序:
- 初始化对象的存储空间为零或null值;
- 按顺序分别调用父类成员变量和实例成员变量的初始化表达式;
- 调用父类构造函数;(如果实用super()方法指定具体的某个父类构造函数则使用指定的那个父类构造函数)
- 按顺序分别调用类成员变量和实例成员变量的初始化表达式;
- 调用类本身构造函数。
//先执行外部类构造方法,再执行内部类构造方法
1.初始化父类静态变量,如果没有赋值,默认初始化为null
2.调用父类 static{} 静态代码块
3.初始化子类静态变量
4.调用子类 static{} 静态代码块
5.初始化父类成员变量,如果没有赋值,默认初始化为null (此时this指针已经存在了)
6.调用父类 成员代码块 {}
7.调用父类构造函数(如果没有显示调用父类构造函数则调用默认构造函数)
8.初始化子类成员变量
9.调用子类成员代码块 {}
10.调用子类构造函数
以上 1 - 4 步只有在类首次被加载的时候执行,之后就不执行了