以下のシナリオを考えてみましょう:
Code:1
public class StaticDemo {
static{
b=5;
System.out.println("Static B:"+b);/*Compilation error:"Cannot reference a field before it is defined"*/
}
static int b;
static{
System.out.println("B:"+b);
}
public static void main(String[] args) {
}
}
以下のようにコードにコメントすると、エラーはなく、次の出力が表示されます。
コード:2
public class StaticDemo {
static{
b=5;
//System.out.println("Static B:"+b);
}
static int b;
static{
System.out.println("B:"+b);
}
public static void main(String[] args) {
}
}
出力-
B:5
実行が静的変数またはブロックが書き込まれた順序に基づいている場合。
b=5
Code:2 に示すように、初期化 ( ) でコンパイル エラーがスローされない理由。また、Code:2 が true の場合、Code:1 でエラーがスローされる理由を説明してください。