静的変数 Java

⚡ スマートサマリー

静的変数 Java これはオブジェクトではなくクラスに属し、クラスのロード時に一度だけ初期化されます。単一の共有コピーがすべてのインスタンスに提供され、オブジェクトを作成することなくクラス名から直接アクセスできます。

  • 📦 静的変数: クラスに属し、すべてのインスタンスで1つのコピーを共有し、ロード時に一度だけ初期化されます。
  • ⚙️ 静的メソッド: クラスに属し、静的データのみにアクセスでき、this/superを無視します。
  • 🧱 静的ブロック: クラスがロードされたときに一度だけ実行され、静的データメンバーを初期化します。
  • 🔗 アクセス: オブジェクトを使わずに、ClassName.member を介して静的メンバーに直接アクセスできます。
  • 制限: 静的メソッドは、非静的(インスタンス)変数を直接参照することはできません。

静的変数 Java

静的なものは次のとおりです。

  1. 静的変数
  2. 静的メソッド
  3. 静的ブロック Code.

まず静的変数と静的メソッドを見てみましょう。

静的変数とは何か Java?

静的変数 Java 静的変数は、クラスに属し、実行開始時に一度だけ初期化される変数です。これは、オブジェクト(インスタンス)ではなく、クラスに属する変数です。静的変数は、実行開始時に一度だけ初期化されます。これらの変数は、インスタンス変数の初期化よりも先に初期化されます。

  • クラスのすべてのインスタンスで共有される単一のコピー
  • 静的変数にはクラス名によって直接アクセスでき、オブジェクトは必要ありません。

構文:

<class-name>.<variable-name>

静的メソッドとは Java?

静的メソッド Java はオブジェクトではなくクラスに属するメソッドです。 静的メソッドは静的データのみにアクセスできます。 オブジェクト(インスタンス)ではなくクラスに属するメソッドです。 静的メソッドは静的データのみにアクセスできます。 非静的データにはアクセスできません (インスタンス変数).

  • 静的メソッドは他の静的メソッドのみを呼び出すことができ、そこから非静的メソッドを呼び出すことはできません。
  • 静的メソッドにはクラス名によって直接アクセスでき、オブジェクトは必要ありません。
  • 静的メソッドでは、「this」または「super」キーワードを参照することはできません。

構文:

<class-name>.<method-name>

注意: main メソッドは静的です。これは、インスタンス化が行われる前にアプリケーションを実行するためにアクセスできる必要があるためです。

いくつかの演習を行って、静的キーワードのニュアンスを学びましょう。

例: 静的変数とメソッドを呼び出す方法

ステップ1) 次のコードをエディターにコピーします

public class Demo{
   public static void main(String args[]){
     Student s1 = new Student();
     s1.showData();
     Student s2 = new Student();
     s2.showData();
     //Student.b++;
     //s1.showData();
  }
}

class Student {
int a; //initialized to zero
static int b; //initialized to zero only when class is loaded not for each object created.

  Student(){
   //Constructor incrementing static variable b
   b++;
  }

   public void showData(){
      System.out.println("Value of a = "+a);
      System.out.println("Value of b = "+b);
   }
//public static void increment(){
//a++;
//}

}

ステップ2) コードを保存してコンパイルします。 コードを次のように実行します。 Java デモ.

ステップ3) 予想される出力を以下に示します


Java 静的メソッドと変数

次の図は、参照変数とオブジェクトがどのように作成され、静的変数がさまざまなインスタンスによってどのようにアクセスされるかを示しています。


Java 静的メソッドと変数

ステップ4) 次の構文を使用してクラスの外部から静的変数にアクセスできます。 クラス名.変数名。 行番号 7 と 8 のコメントを解除します。 保存、コンパイル、実行。 出力を観察します。

Value of a = 0
Value of b = 1
Value of a = 0
Value of b = 2
Value of a = 0
Value of b = 3

ステップ5) 行 25,26、27、XNUMX のコメントを解除します。 保存し、コンパイルして実行します。

	 error: non-static variable a cannot be referenced from a static context a++; 

ステップ6) エラー = ? これはインスタンス変数にアクセスできないためです。a” Java 静的クラスメソッドより”増加"

静的ブロックとは Java?

その 静的ブロック は、 Java クラスが最初にロードされたときに実行されるクラス JVMに直接影響を与えます。健全とされるのは 静的ブロックは静的データ メンバーの初期化に役立ちますコンストラクターがインスタンス メンバーの初期化に役立つのと同じように。

class Test{
 static {
 //Code goes here
 }
}

次のプログラムは Java 静的ブロックの例です。

例: 静的ブロックにアクセスする方法

public class Demo {
 static int a;
 static int b;
 static {
    a = 10;
    b = 20;
 }
 public static void main(String args[]) {

  System.out.println("Value of a = " + a);
  System.out.println("Value of b = " + b);

 	}
}

プログラムから次の出力が得られます。

Value of a = 10
Value of b = 20

よくあるご質問

静的変数はクラスに属し、すべてのオブジェクトで共有されるコピーが1つ存在します。インスタンス変数は各オブジェクトに属し、インスタンスごとに個別のコピーが作成され、オブジェクトが作成されるときに初期化されます。

いいえ。静的メソッドは、静的データと他の静的メソッドにのみアクセスできます。静的コンテキストから非静的(インスタンス)変数を参照すると、オブジェクトがまだ存在しないため、コンパイルエラーが発生します。

静的ブロックは、クラスがJVMに最初にロードされたとき、オブジェクトが作成されたりメインメソッドが実行されたりする前に一度だけ実行されます。これは、静的データメンバーを初期化するために使用されます。

AI は、フィールドやメソッドがどのように使用されているかを分析し、データがすべてのインスタンスで共有されている場合やインスタンスの状態が不要な場合に静的な処理を推奨できます。ping 開発者は不要なオブジェクトを避け、メモリ使用量を削減する。

はい。AIによる分析は、スレッドセーフティの問題、隠れたグローバルな依存関係、またはテストの困難さを引き起こす可変の静的状態を検出し、インスタンスフィールドや依存性注入などのより安全な代替案を提案できます。