初期化が発生する順序、または初期化がこの順序で発生する理由を発見しようとしています。コードを考えると:
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 ブロックもコンストラクターも起動しません。誰でもこれで私を助けることができますか?