web-dev-qa-db-ja.com

Javaの静的最終変数

可能性のある複製:
プライベート最終静的属性とプライベート最終属性

変数を宣言することの違いは何ですか

static final int x = 5;

または

final int x = 5;

変数をローカルで定数にしたいだけなら(後で変更することはできません)?

ありがとう

36
darksky

finalを持つだけで、意図した効果が得られます。

final int x = 5;

...
x = 10; // this will cause a compilation error because x is final

Staticを宣言すると、クラス変数になり、クラス名<ClassName>.xを使用してアクセス可能になります

34
Oh Chin Boon

フィールドを「最終」として宣言すると、フィールドは定数であり、変更できなくなります。違いは「静的」キーワードの使用法にあります。

フィールドを静的として宣言すると、フィールドはインスタンスではなくタイプに関連付けられます。つまり、フィールドのコピーはすべてのオブジェクトに対して1つだけ存在し、各オブジェクトの個々のコピーは存在しません。このため、静的フィールドにはクラス名を介してアクセスできます。

ご覧のとおり、フィールドが一定であるという要件は、両方の場合に達成されます(フィールドを 'final'および 'static final'として宣言する)。

同様の質問は プライベート最終静的属性対プライベート最終属性

それが役に立てば幸い

32
Sathya

最初のステートメントでは、すべてのオブジェクト(クラス静的フィールド)に共通の変数を定義します。

2番目のステートメントでは、作成された各オブジェクト(多くのコピー)に属する変数を定義します。

あなたの場合、最初のものを使うべきです。

6
Pavel

プリミティブ型の場合、「最終静的」は定数を宣言する適切な宣言になります。非静的final変数は、オブジェクトへの定数参照である場合に意味があります。この場合、 JLS 4.5.4 に示すように、各インスタンスには独自の参照を含めることができます。

正解については、Pavelの回答をご覧ください。

3
mazaneicha