java编译错误取决于静态变量名是否合格?

时间:2012-07-29 00:53:29

标签: java javac

为什么这个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.类名称前缀或多或少只是语法...这是编译器或语言规范中的错误吗? :)

1 个答案:

答案 0 :(得分:7)

执行xx.obj时,表示该类已初始化。因此final obj无法再次初始化。这是编译时错误。编译器可能已检查obj尚未初始化。很难检查,但从理论上说这是可能的。 但这不是Java编译器的工作方式。