Javaの静的:
Staticは非アクセス修飾子です。staticキーワードは、クラスのインスタンスよりもクラスに属しています。クラスに変数またはメソッドをアタッチするために使用できます。
静的キーワードは以下で使用できます:
方法
変数
別のクラス内にネストされたクラス
初期化ブロック
次のものでは使用できません:
クラス(ネストされていない)
コンストラクタ
インターフェース
メソッドローカル内部クラス(違いとネストされたクラス)
内部クラスメソッド
インスタンス変数
ローカル変数
例:
コンストラクターでインクリメントされる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
この場合、静的変数はメモリを1回だけ取得し、オブジェクトが静的変数の値を変更した場合、その値を保持します。
ファイナル付きスタティック:
finalとstaticとして宣言されているグローバル変数は、実行全体を通して変更されません。静的メンバーはクラスメモリに格納され、実行全体で一度だけロードされるためです。それらはクラスのすべてのオブジェクトに共通です。static変数をfinalとして宣言すると、オブジェクトはfinalなので値を変更できません。したがって、finalおよびstaticとして宣言された変数は、定数と呼ばれることがあります。インターフェイスのすべてのフィールドは、デフォルトで最終的で静的であるため、定数と呼ばれます。
画像リソース:最終的な静的