9

为什么这个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 = nullobj = null(正如评论中提到的那样)它会编译。

我认为xx.类名前缀或多或少只是语法......这是编译器或语言规范中的错误?:)

4

1 回答 1

7

当你这样做时xx.obj,这意味着该类已经初始化。所以final obj无法再次初始化。这是一个编译时错误。编译器可以检查obj尚未初始化。很难检查,但理论上是可能的。但这不是 Java 编译器的工作方式。

于 2012-07-29T01:11:21.730 回答