web-dev-qa-db-ja.com

なぜJava定数は静的と宣言されていますか?

なぜJava定数はstaticと宣言されていますか?

class Foo{
    static final int FII = 2 ;
}

これで私は最終の使用を理解しますか?購入する理由はなぜ静的である必要があるのですか?インスタンス変数ではなくクラス変数にする必要があるのはなぜですか?

30
Vaibhav

クラスのインスタンスによって異なる場合は、明らかにconstantではありません。 Mathの各インスタンスに対してpiの異なる値を取得することはどういう意味ですか(Mathでインスタンスを構築することさえできません)。または、Stringの各インスタンスの大文字と小文字を区別しない異なる順序付けですか?

35
Jon Skeet

定数が静的でない場合、Javaは、クラスのすべてのオブジェクトでその定数にメモリを割り当てます(つまり、オブジェクトごとに定数の1つのコピー)。

定数が静的である場合、そのクラスの定数のコピーは1つだけです(つまり、クラスごとに1つのコピー)。

したがって、定数に値が1つしかない場合は、静的と宣言する必要があります。

オブジェクトの作成時間など、オブジェクトごとに定数の値が異なる場合は、静的と宣言しないでください。

87
wannik

そのクラスのインスタンスなしでアクセスできるようにするためです。

定数フィールドにアクセスするためだけにインスタンスを作成する必要があるのは、リソースの少しの無駄です。

13
Mat