JLS 8.3.2.3を実行したとき、次のコードを理解できませんでした。
class Z {
static { i = j + 2; }
static int i, j;
static { j = 4; }
}
コードの結果、エラーが発生しますCannot reference a field before it is defined
しかし、コードを次のように変更すると
class Z {
static { i = 2; }
static int i, j;
static { j = 4; }
}
コードがコンパイルされています。ただし、どちらの場合も、変数定義は初期化ブロックの後にあります。この背後にある謎は何ですか?