【发布时间】:2013-01-04 05:42:04
【问题描述】:
在浏览 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; }
}
代码正在编译。但在这两种情况下,变量定义都在初始化块之后。这背后的奥秘是什么?
【问题讨论】:
-
它们是声明,在运行任何代码之前就知道......这就像问为什么我可以从要调用的方法上方定义的方法调用方法
-
@Esailija:
i和j有什么区别。为什么只针对j出错?如果您提供更多信息会很好。
标签: java static initializer jls