java父类、子类构造函数调用过程
java父类、子类构造函数调用过程
由此看出java类初始化时构造函数调用顺序:
- 初始化对象的存储空间为零或null值;
- 按顺序分别调用父类成员变量和实例成员变量的初始化表达式;
- 调用父类构造函数;(如果实用super()方法指定具体的某个父类构造函数则使用指定的那个父类构造函数)
- 按顺序分别调用类成员变量和实例成员变量的初始化表达式;
- 调用类本身构造函数。
//先执行外部类构造方法,再执行内部类构造方法
[Java实例化顺序
]( https://www.cnblogs.com/liufengfan/p/12395086.html#:~:text=Java实例化顺序 1.初始化父类静态变量%2C如果没有赋值%2C默认初始化为null 2.调用父类 static {} 静态代码块 ,3.%E5%88%9D%E5%A7%8B%E5%8C%96%E5%AD%90%E7%B1%BB%E9%9D%99%E6%80%81%E5%8F%98%E9%87%8F%204.%E8%B0%83%E7%94%A8%E5%AD%90%E7%B1%BB%20static%20%7B%7D%20%E9%9D%99%E6%80%81%E4%BB%A3%E7%A0%81%E5%9D%97%205.%E5%88%9D%E5%A7%8B%E5%8C%96%E7%88%B6%E7%B1%BB%E6%88%90%E5%91%98%E5%8F%98%E9%87%8F%2C%E5%A6%82%E6%9E%9C%E6%B2%A1%E6%9C%89%E8%B5%8B%E5%80%BC%2C%E9%BB%98%E8%AE%A4%E5%88%9D%E5%A7%8B%E5%8C%96%E4%B8%BAnull%20%28%E6%AD%A4%E6%97%B6this%E6%8C%87%E9%92%88%E5%B7%B2%E7%BB%8F%E5%AD%98%E5%9C%A8%E4%BA%86%29)
1.初始化父类静态变量,如果没有赋值,默认初始化为null
2.调用父类 static{} 静态代码块
3.初始化子类静态变量
4.调用子类 static{} 静态代码块
5.初始化父类成员变量,如果没有赋值,默认初始化为null (此时this指针已经存在了)
6.调用父类 成员代码块 {}
7.调用父类构造函数(如果没有显示调用父类构造函数则调用默认构造函数)
8.初始化子类成员变量
9.调用子类成员代码块 {}
10.调用子类构造函数
以上 1 - 4 步只有在类首次被加载的时候执行,之后就不执行了

浙公网安备 33010602011771号