5

静的な最終変数にはデフォルト値が与えられないのに、静的なものではないのはなぜですか(ただし、非最終変数にはデフォルト値が与えられます)。

このような動作がJavaで実装された理由は何ですか?

4

2 に答える 2

16

もちろん、静的最終変数にはデフォルト値が与えられます。たとえば、次を参照してください。

class Test {
    static final int x;
    static {
        printX();
        x = 42;
        printX();
    }

    static void printX() {
        System.out.println("Here x is "+x);
    }
    public static void main(String[] args) { }
}

出力は次のとおりです。

Here x is 0
Here x is 42

JLS 4.12.5で指定されてxいるデフォルト値が指定されていない場合、出力は使用されるJVMによって異なります。乱数が表示される場合があります。0

更新:静的な最終フィールドがデフォルト値を取得することを示したので、デフォルト値が十分でない理由を知りたい場合があります。明白な質問以外に、その質問に対する良い答えはありません:「仕様はそう言っています」。8.3.1.2からの抜粋:

空白のfinal(§4.12.4)クラス変数が、それが宣言されているクラスの静的初期化子(§8.7)によって明確に割り当てられていない場合(§16.8)、コンパイル時エラーになります。

そのような制限の動機は推測できますが、プログラムを理解しやすくするためだと思います。変数を0に設定する場合は、明示的に設定する方が明確です。

于 2012-04-30T09:53:18.403 に答える
0

単純。それらはfinalであるため、後で変更することはできません。したがって、デフォルト値もfinalになります。後で変更することはできません。あまり役に立ちません。

于 2012-04-30T09:48:28.873 に答える