logo

Javaの静的と非静的の違い

Java でクラス、変数、メソッドがどのように動作するかを理解するには、静的と非静的の概念を理解することが重要です。非静的メンバーは特定のクラス インスタンスにリンクされますが、静的メンバーはクラスに接続されます。このセクションでは、静的 Java コンポーネントと非静的 Java コンポーネントを対比し、その違いと潜在的なアプリケーションを強調します。

と関連した

静的: 静的メンバー (変数およびメソッド) は、個々のインスタンスではなくクラス自体に関連付けられます。

非静的: 非静的メンバーは、クラスから作成されたオブジェクトに関連付けられているため、クラスの各インスタンスに固有です。

メモリの割り当て

静的: 静的メンバーには、クラスのロード時に 1 回だけメモリが割り当てられます。これらはクラスのすべてのインスタンス間で共有されます。

非静的: 非静的メンバーには、クラスのインスタンスごとに個別にメモリが割り当てられます。各オブジェクトには、非静的メンバーの独自のコピーがあります。

アクセスする

静的: 静的メンバーには、クラス名に続いてメンバー名を使用して直接アクセスできます (例: ClassName.memberName)。これらはプログラム内のどこからでもアクセスできます。

非静的: 非静的メンバーには、オブジェクト参照とそれに続くメンバー名を使用してアクセスします (たとえば、objectReference.memberName)。これらはクラスの特定のインスタンスに固有です。

初期化

静的: 静的メンバーは、クラスがメモリにロードされるとき (通常はプログラムの起動時) に初期化されます。初期化は 1 回だけ行われます。

非静的: 非静的メンバーは、クラスの各インスタンスの作成時に、通常は new キーワードを使用して初期化されます。初期化はオブジェクトごとに個別に行われます。

範囲

静的: 静的メンバーにはグローバル スコープがあり、クラスのインスタンスを作成しなくても、プログラム内のどこからでもアクセスできます。

math.random Java

非静的: 非静的メンバーにはローカル スコープがあり、クラスのインスタンスを通じてのみアクセスできます。オブジェクトを作成しないとアクセスできません。

メンバーへのアクセス

静的: 静的メンバーは、同じクラス内の他の静的メンバーにのみアクセスできます。非静的メンバーに直接アクセスすることはできません。

非静的: 非静的メンバーは、同じクラス内の静的メンバーと非静的メンバーの両方にアクセスできます。すべてのメンバーに直接アクセスできます。

使用法

静的: 静的メンバーは通常、個々のインスタンスに固有ではないユーティリティ メソッド、定数、または変数に使用されます。たとえば、数学関数を含む Math クラスです。

非静的: 非静的メンバーは各オブジェクトに固有のデータを保持するため、インスタンス固有の動作に使用されます。たとえば、オブジェクトごとに一意の値を格納するインスタンス変数などです。

メモリ効率

静的: 静的メンバーは、作成されたインスタンスの数に関係なく、メモリを 1 回だけ消費します。すべてのオブジェクト間で同じデータを共有する必要がある場合、メモリ効率が高くなります。