我试图找出初始化发生的顺序,或者说是为什么初始化按此顺序发生的原因.鉴于代码:
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");
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
STATIC BLOCK
NON-STATIC BLOCK
MAIN CONSTRUCTOR
MAIN METHOD
Run Code Online (Sandbox Code Playgroud)
但是,m在初始化块之前移动声明会产生:
NON-STATIC BLOCK
MAIN CONSTRUCTOR
STATIC BLOCK
MAIN METHOD
Run Code Online (Sandbox Code Playgroud)
我完全不知道为什么它会按此顺序发生.此外,如果我static在声明中删除了关键字m,则init块和构造函数都不会触发.任何人都可以帮我解决这个问题吗?
java ×1