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 = nullと、コンパイルされます。obj = null

xx.クラス名のプレフィックスは多かれ少なかれ構文だけだと思いました...これはコンパイラまたは言語仕様のバグですか?:)

4

1 に答える 1

7

するとxx.obj、クラスがすでに初期化されていることを意味します。したがってfinal obj、再度初期化することはできません。これはコンパイル時エラーです。objコンパイラは、まだ初期化されていないことを確認した可能性があります。それを確認するのは難しいでしょうが、理論的には可能です。しかし、それはJavaコンパイラの仕組みではありません。

于 2012-07-29T01:11:21.730 に答える