任何人都可以解释这段代码有什么问题:
public class Base {
static {
i = 1;
System.out.println("[Base]after static init block i=" + i);// LINE 1
System.out.println("*************************************");
System.out.println();
}
static int i;
public static void main(String[] args) {
System.out.println(Base.i);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我评论LINE 1 - 一切正常,Base.main方法打印"1".如果没有注释LINE 1 - ,则得到编译时错误:"非法前向引用".所以,正如我在静态初始化块中所理解的,我可以为i设置值,但不能读取.谁有人解释为什么?
"非法转发引用"表示您在定义变量之前尝试使用该变量.
您观察到的行为是javac错误的症状(请参阅此错误报告).问题似乎在较新版本的编译器中得到修复,例如OpenJDK 7.
看一下