分析&回答
java 的初始化顺序是
- 首先会初始化父类,因为没有父类子类也无从谈起。第一步初始化父类的 静态变量 和 静态代码块
- 初始化子类的 静态变量 和 静态代码块
- 顺序初始化父类普通变量 或者 父类普通变量初始化块 ,然后是构造函数
- 顺序初始化子类普通变量 或者 子类普通变量初始化块 ,然后是构造函数
class Insect {
private int i = 9;
protected int j ;
public Insect() {
System.out.print("i=" + i + ",j = " + j +"\n");
j=39;
}
private static int x1 = printInt("Inset.x1 init\n");
static int printInt(String s) {
System.out.print(s);
return 47;
}
}
public class Beetle extends Insect {
private int k =printInt("Beetle.k init\n");
public Beetle() {
System.out.print("s=" + s + ",");
System.out.print("k="+ k + ",");
System.out.print("j="+j);
}
private static int x2 = printInt("Beetle.x2 is init\n");
private int s = printInt("Beetle.s init\n");
public static void main(String[] args) {
System.out.print("Starting\n");
Beetle b = new Beetle();
}
}
执行结果:
Inset.x1 init
Beetle.x2 is init
Starting
i=9,j = 0
Beetle.k init
Beetle.s init
s=47,k=47,j=39
反思&扩展
所有的static对象和static 代码都会在加载时依程序中的编写顺序而依次初始化。
喵呜面试助手: 一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!