为什么这个java程序不能编译:
public class xx {
public static final Object obj;
static {
// obj = null; // this compiles
xx.obj = null; // this doesn't
}
}
出现此错误:
$ javac xx.java
xx.java:5: cannot assign a value to final variable obj
xx.obj = null; // this doesn't
^
1 error
$ javac -version
javac 1.6.0_33
当我将xx.obj = null
替换为obj = null
时(如评论中所提及的那样),它会编译。
我认为xx.
类名称前缀或多或少只是语法...这是编译器或语言规范中的错误吗? :)
答案 0 :(得分:7)
执行xx.obj
时,表示该类已初始化。因此final obj
无法再次初始化。这是编译时错误。编译器可能已检查obj
尚未初始化。很难检查,但从理论上说这是可能的。
但这不是Java编译器的工作方式。