Java の静的:
Static は非アクセス修飾子です。static キーワードは、クラスのインスタンスよりもクラスに属します。変数またはメソッドをクラスにアタッチするために使用できます。
static キーワードは以下で使用できます。
方法
変数
別のクラス内にネストされたクラス
初期化ブロック
使用できません:
クラス (ネストされていない)
コンストラクタ
インターフェース
Method Local Inner Class(ネストされたクラスとの違い)
内部クラス メソッド
インスタンス変数
ローカル変数
例:
コンストラクターでインクリメントされるcount という名前のインスタンス変数を持つ次の例を想像してください。
package pkg;
class StaticExample {
int count = 0;// will get memory when instance is created
StaticExample() {
count++;
System.out.println(count);
}
public static void main(String args[]) {
StaticExample c1 = new StaticExample();
StaticExample c2 = new StaticExample();
StaticExample c3 = new StaticExample();
}
}
出力:
1 1 1
インスタンス変数はオブジェクト作成時にメモリを取得するため、各オブジェクトはインスタンス変数のコピーを持つことになり、インクリメントしても他のオブジェクトには反映されません。
インスタンス変数カウントを静的変数に変更すると、プログラムは異なる出力を生成します。
package pkg;
class StaticExample {
static int count = 0;// will get memory when instance is created
StaticExample() {
count++;
System.out.println(count);
}
public static void main(String args[]) {
StaticExample c1 = new StaticExample();
StaticExample c2 = new StaticExample();
StaticExample c3 = new StaticExample();
}
}
出力:
1 2 3
この場合、静的変数は一度だけメモリを取得します。オブジェクトが静的変数の値を変更した場合、その値は保持されます。
最終的な静的:
final および staticとして宣言されたグローバル変数は、実行全体で変更されません。静的メンバーはクラス メモリに格納され、実行全体で 1 回だけ読み込まれるためです。それらはクラスのすべてのオブジェクトに共通です。static 変数を final として宣言すると、オブジェクトは final であるため値を変更できません。したがって、final および static として宣言された変数は、定数と呼ばれることがあります。インターフェイスのすべてのフィールドは、デフォルトで最終的で静的であるため、定数と呼ばれます。

画像リソース :最終静的