我试图发现初始化发生的顺序,或者更确切地说,初始化以这种顺序发生的原因。给定代码:
public class Main {
{
System.out.printf("NON-STATIC BLOCK\n");
}
static{
System.out.printf("STATIC BLOCK\n");
}
public static Main m = new Main();
public Main(){
System.out.printf("MAIN CONSTRUCTOR\n");
}
public static void main(String... args) {
//Main m = new Main();
System.out.printf("MAIN METHOD\n");
}
}
输出:
STATIC BLOCK
NON-STATIC BLOCK
MAIN CONSTRUCTOR
MAIN METHOD
但是,m
在初始化块之前移动的声明会产生:
NON-STATIC BLOCK
MAIN CONSTRUCTOR
STATIC BLOCK
MAIN METHOD
我完全不知道为什么它会以这种顺序发生。此外,如果我在声明中删除static
关键字,m
则 init 块和构造函数都不会触发。谁能帮我解决这个问题?