可能性のある複製:
プライベート最終静的属性とプライベート最終属性
変数を宣言することの違いは何ですか
static final int x = 5;
または
final int x = 5;
変数をローカルで定数にしたいだけなら(後で変更することはできません)?
ありがとう
final
を持つだけで、意図した効果が得られます。
final int x = 5;
...
x = 10; // this will cause a compilation error because x is final
Staticを宣言すると、クラス変数になり、クラス名<ClassName>.x
を使用してアクセス可能になります
フィールドを「最終」として宣言すると、フィールドは定数であり、変更できなくなります。違いは「静的」キーワードの使用法にあります。
フィールドを静的として宣言すると、フィールドはインスタンスではなくタイプに関連付けられます。つまり、フィールドのコピーはすべてのオブジェクトに対して1つだけ存在し、各オブジェクトの個々のコピーは存在しません。このため、静的フィールドにはクラス名を介してアクセスできます。
ご覧のとおり、フィールドが一定であるという要件は、両方の場合に達成されます(フィールドを 'final'および 'static final'として宣言する)。
同様の質問は プライベート最終静的属性対プライベート最終属性
それが役に立てば幸い
最初のステートメントでは、すべてのオブジェクト(クラス静的フィールド)に共通の変数を定義します。
2番目のステートメントでは、作成された各オブジェクト(多くのコピー)に属する変数を定義します。
あなたの場合、最初のものを使うべきです。
プリミティブ型の場合、「最終静的」は定数を宣言する適切な宣言になります。非静的final変数は、オブジェクトへの定数参照である場合に意味があります。この場合、 JLS 4.5.4 に示すように、各インスタンスには独自の参照を含めることができます。
正解については、Pavelの回答をご覧ください。