静的な最終変数にはデフォルト値が与えられないのに、静的なものではないのはなぜですか(ただし、非最終変数にはデフォルト値が与えられます)。
このような動作がJavaで実装された理由は何ですか?
静的な最終変数にはデフォルト値が与えられないのに、静的なものではないのはなぜですか(ただし、非最終変数にはデフォルト値が与えられます)。
このような動作がJavaで実装された理由は何ですか?
もちろん、静的最終変数にはデフォルト値が与えられます。たとえば、次を参照してください。
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に設定する場合は、明示的に設定する方が明確です。
単純。それらはfinal
であるため、後で変更することはできません。したがって、デフォルト値もfinalになります。後で変更することはできません。あまり役に立ちません。