在浏览 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; }
}
代码正在编译。但在这两种情况下,变量定义都在初始化块之后。这背后的奥秘是什么?