CodeGym /Java Blog /ランダム /Java の静的変数
John Squirrels
レベル 41
San Francisco

Java の静的変数

ランダム グループに公開済み

静的変数とは何ですか?

静的変数またはクラス変数は、クラスのすべてのインスタンス間で共有され、クラスのインスタンスを作成せずにアクセスおよび変更できます。Java での 静的変数の使用法と実装を理解するために詳しく見てみましょう。

Java での静的変数の例

静的変数の最も一般的な用途の 1 つは、クラスのすべてのインスタンス間で共有することです。たとえば、作成されたインスタンスの数を追跡するカウンター変数や、決して変更されない値を保持するCONSTANT変数などです。銀行口座を表すクラスについて考えてみましょう。次のコード スニペットは、静的変数nextAccountNumberを使用して、各新しいアカウントに一意のアカウント番号を割り当てる方法を示しています。

// BankAccount class definition
class BankAccount {
  // Declare static variable nextAccountNumber
  static int nextAccountNumber = 1001;

  // Declare instance variables for accountNumber and balance.
  int accountNumber;
  double balance;

  // BankAccount constructor that assigns unique account number to each instance
  BankAccount() {
    // Assign the current value of nextAccountNumber to accountNumber.
    accountNumber = nextAccountNumber;

    // Increment nextAccountNumber for the next BankAccount object.
    nextAccountNumber++;
  }

  // Method to get the account number of this BankAccount object.
  int getAccountNumber() {
    return accountNumber;
  }

  // Method to get the balance of this BankAccount object.
  double getBalance() {
    return balance;
  }

  // Method to deposit an amount into this BankAccount object.
  void deposit(double amount) {
    // Increase balance by the amount deposited.
    balance += amount;
  }

  // Method to withdraw an amount from this BankAccount object.
  void withdraw(double amount) {
    // Decrease balance by the amount withdrawn.
    balance -= amount;
  }
}

// Main method definition
class Main {
  static void main(String[] args) {
    // Create three BankAccount objects: account1, account2, and account3.
    BankAccount account1 = new BankAccount();
    BankAccount account2 = new BankAccount();
    BankAccount account3 = new BankAccount();

    // Display the value of the static variable nextAccountNumber after creating each BankAccount object.
    System.out.println("Value of nextAccountNumber after creating account1: " + account1.getAccountNumber());
    System.out.println("Value of nextAccountNumber after creating account2: " + account2.getAccountNumber());
    System.out.println("Value of nextAccountNumber after creating account3: " + account3.getAccountNumber());
  }
}

出力

account1 作成後の nextAccountNumber の値:1001 account2 作成後の nextAccountNumber の値:1002 account3 作成後の nextAccountNumber の値:1003
この例では、main メソッドはBankAccountクラスの 3 つのインスタンスを作成します。BankAccountコンストラクターは、 nextAccountNumberを新しい口座に割り当て、 nextAccountNumber変数を 1 ずつ増分します。 getAccountNumberメソッド、各口座の口座番号を返します。次に、main メソッドは、各アカウントのアカウント番号とnextAccountNumber変数を出力します。各アカウント番号は一意であり、新しいアカウントが作成されるたびにnextAccountNumber変数が 1 ずつ増加することが わかります。静的変数を使用して、クラスのインスタンスを 1 つだけ作成できるシングルトン設計パターンを実装することもできます。シングルトン クラスは、 Javaアプリケーション内でインスタンスを 1 つだけ持つことができ、同時にこのインスタンスへのグローバル アクセス ポイントを提供するクラスです。次のコード スニペットは、静的変数インスタンスを使用してシングルトン クラスを実装する方法を示しています。

public class Singleton {
    // using static variable in the singleton class
    private static Singleton instance;
    private Singleton() { }

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

    public void displayMessage() {
        System.out.println("This is a singleton class");
    }

    public static void main(String[] args) {
        Singleton singleton1 = Singleton.getInstance();
        singleton1.displayMessage();

        Singleton singleton2 = Singleton.getInstance();
        singleton2.displayMessage();

        Singleton singleton3 = Singleton.getInstance();
        singleton3.displayMessage();
    }
}

出力

これはシングルトン クラスです これはシングルトン クラスです これはシングルトン クラスです
この例では、mainメソッドはgetInstance()メソッドを呼び出して、Singletonクラスの 3 つのインスタンスを作成します。getInstance ()メソッドはクラスのインスタンスを返し、インスタンスが存在しない場合は新しいインスタンスを作成します。displayMessageメソッドメッセージを出力するだけです。次に、mainメソッドはインスタンスごとにdisplayMessageメソッドを呼び出します。ご覧のとおり、3 つのインスタンスを作成しているにもかかわらず、作成され、すべてのインスタンス間で共有されるオブジェクトは 1 つだけです。これは、クラスのインスタンスが 1 つだけ作成され、すべてのインスタンスで共有され、静的変数「instance」が保持されていることを示しています。静的変数の値はクラスのすべてのインスタンス間で共有されるため、あるインスタンスによって行われた変数への変更は他のすべてのインスタンスに表示されることを覚えておくことが重要です。コード内の潜在的な競合やバグを避けるために、静的変数については慎重に検討する必要があります。たとえば、口座残高など、クラスのインスタンスに固有の値を保持するために静的変数を使用することはお勧めできません。 学んだことをさらに強化するには、Java コースのビデオ レッスンを視聴することをお勧めします。

結論

最後に、 Java の静的変数を使用すると、クラスのすべてのインスタンス間でデータを共有できます。これらは、カウンターや定数などのすべてのインスタンス間で共有される変数に使用したり、シングルトン デザイン パターンを実装したりするために使用できます。ただし、静的変数の値はクラスのすべてのインスタンス間で共有されるため、あるインスタンスによって行われた変数への変更は他のすべてのインスタンスに表示されることに留意することが重要です。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION