Java中的非法前向引用问题
为什么在变量声明中使用引用this
时,不会出现非法的前向引用?有this
和没有它的声明有什么区别
由于非法的正向引用,以下示例无法编译:
class FailsToCompile {
int a = b; //illegal forward reference
int b = 10;
}
通过限定this
对b
的使用,编译错误消失了
class Compiles {
int a = this.b; //that's ok
int b = 10;
}
# 1 楼答案
假设下一节课
在你的案例中JLS 8.3.3.声明:
现在,使用成员
this
可以访问已经用默认值(a = 0, b = 0
)声明但尚未完全初始化的实例。如果您检查以下结果,则可以看到:您将无法获得预期的值:
我无法解释为什么这是合法的,因为这永远不会给出正确的值。我们可以找到一些关于限制存在原因的解释:
但是为什么允许
this
起作用知道在实例初始化期间,会发生以下操作:
给出一些奇怪的行为:
我会限制构造函数中的初始化