Javaのstaticとfinalの違いは何ですか?
Javaにおいて、staticとfinalは異なるキーワードであり、それぞれの役割や使い方も異なります。以下にその違いを示します。
- static キーワード:
- staticキーワードはメンバー変数やメソッドを修飾するために使用され、そのメンバーがクラスに属していることを示し、オブジェクトに属しているわけではありません。つまり、オブジェクトを作成せずに、クラス名を使って静的メンバーに直接アクセスすることができます。
- すべてのオブジェクトで静的なメンバ変数は共有され、1つのメモリ内に存在し、クラスの読み込み時に初期化されます。静的なメンバメソッドもすべてのオブジェクトで共有され、クラス名を直接使用して呼び出すことができます。
- オブジェクトを作成せずに静的メンバーにアクセスして変更することができるため、クラスレベルの操作やデータの共有に使用できます。
- final キーワード:
- finalキーワードは、クラス、メソッド、および変数を修飾するために使用できます。
- 最終修飾されたクラスは継承できないことを表します。
- final修飾されたメソッドは、サブクラスでオーバーライドできないことを示します。
- final修飾された変数は、その値を変更できないことを示し、つまり定数である。final変数は宣言時またはコンストラクタ内で値を割り当てる必要があり、一度割り当てられた値は変更できない。
- final変数はランタイム時に決定することもできますし、コンパイル時に決定することもできます。基本タイプのfinal変数はコンパイル時に値が決まりますが、参照タイプのfinal変数はオブジェクトの指向がコンパイル時に確定されますが、オブジェクトの内容はランタイム時に変更できます。
まとめ:
staticキーワードは、メンバーがクラスに属していることを示し、オブジェクトを作成しなくてもアクセスや変更が可能です。一方、finalキーワードは変更できないクラス、メソッド、または変数を示します。