为什么这个java程序不能编译:
public class xx {
public static final Object obj;
static {
// obj = null; // this compiles
xx.obj = null; // this doesn't
}
}
Run Code Online (Sandbox Code Playgroud)
有这个错误:
$ 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
Run Code Online (Sandbox Code Playgroud)
的时候,如果我取代xx.obj = null用obj = null(如评论提到),它编译.
我认为xx.类名前缀或多或少只是语法...这是编译器或语言规范中的错误吗?:)
当你这样做时xx.obj,意味着该类已经初始化.所以final obj不能再次初始化.这是编译时错误.编译器可能已检查obj尚未初始化.很难检查,但从理论上说这是可能的.但这不是Java编译器的工作方式.