static フィールドは、定義または初期化する前に参照することはできません。
static Integer j = i; /* compile error */
static final Integer i = 5;
ただし、インスタンスの初期化ブロック (匿名の内部クラス内) から参照された場合は、警告も生成されません。
例を参照してください:
class StaticInitialization {
static final Object o = new Object() {{
j = i;
}};
static Integer j, k;
static final Integer i = 5;
static final Object o2 = new Object() {{
k = i;
}};
}
結果はj == null
,k == 5
です。つまり、参照を作成したことは明らかであり、順序が重要であり、警告やコンパイル エラーはありません。
このコードは合法ですか?