我了解到初始化顺序的原则是:
- 首先是父类(在这种情况下不讨论)
- 按照出现的顺序进行静态变量声明和静态初始化块
- 按照出现的顺序进行实例变量声明和静态初始化块
- 构造函数
但是我仍然对以下代码的输出感到困惑:
public class Test1 {
static {
add(2);
}
static void add (int num) {
System.out.println(num + " ");
}
public Test1() {
add(5);
System.out.println("Constructor!");
}
static {
add(4);
}
{
add(6);
}
static {
new Test1();
}
{
add(8);
}
public static void main(String[] args) {
System.out.println("Main method!");
add(10);
}
{
add(11);
}
static {
add(12);
}
}
结果是:
2
4
6
8
11
5
Constructor!
12
Main method!
10
如果没有add(10); add(11); add(12)的陈述,我完全可以理解。 请问您能否解释一下这3个语句的初始化顺序?
static 2 4
;非静态(但从静态块中调用)6 8 11
,构造函数5
;然后再次执行其余的静态块12
。现在当类完全初始化时,JVM 执行main
方法 (10
)。 - Pshemo