通過JLS 8.3.2.3時,我無法理解下面的代碼。Java靜態初始化塊上的奇怪代碼
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; }
}
的代碼編譯得到。但是在這兩種情況下,變量定義都在初始化塊之後。這背後的奧祕是什麼?
它們是聲明,在任何代碼運行之前就已知...這就像問我爲什麼可以調用方法上面定義的方法來調用方法 – Esailija
@Esailija:'i'和'j'之間有什麼區別。爲什麼只爲'j'錯誤?如果您提供更多信息將會很好。 – xyz