2011-11-11 7 views
21

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

これで私は最終的な使用を理解していますか?なぜそれは静的でなければならないのですか?なぜインスタンス変数ではなくクラス変数であるべきですか?

+8

なぜ、複数のインスタンスに独自のFIIコピーを持たせたいのですか? –

+1

'final int FII = 2;'と宣言できます。 –

+0

@JonLin:できることですが、値を追加するのではなく、メモリの使用量を増やすだけなので、しないでください。例外は、コンストラクタ呼び出しで定数の初期化となり、各インスタンスはそれ自身の定数値(コンストラクタ実行後の定数)を持つことができ、 'constructionTime'などの値を持つことができます。 –

答えて

26

クラスのインスタンスによって異なる場合は、明らかに定数ではありません。 Mathのインスタンスごとに異なるpiの値を得ることは意味します(Mathではインスタンスの構築もできません)。または、それぞれのインスタンスに対して異なる大文字と小文字を区別しない順序をString

12

これは、そのクラスのインスタンスなしでアクセスできるように単純になっています。

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

76

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

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

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

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

+4

とても素敵で技術的な答えです、ありがとうございました。 –

関連する問題