CodeGym /Blog Java /Random-PL /Zmienne statyczne w Javie
John Squirrels
Poziom 41
San Francisco

Zmienne statyczne w Javie

Opublikowano w grupie Random-PL

Co to są zmienne statyczne?

Zmienne statyczne lub zmienne klasowe są współdzielone pomiędzy wszystkimi instancjami klasy i można uzyskać do nich dostęp oraz je modyfikować bez tworzenia instancji klasy. Przyjrzyjmy się bliżej, aby zrozumieć zastosowania i implementację zmiennych statycznych w Javie.

Przykład zmiennej statycznej w Javie

Jednym z najczęstszych zastosowań zmiennych statycznych jest współdzielenie ich pomiędzy wszystkimi instancjami klasy. Na przykład zmienna licznikowa , która śledzi liczbę utworzonych instancji, lub zmienna CONSTANT , która przechowuje wartość, która nigdy się nie zmienia. Rozważmy klasę reprezentującą konto bankowe. Poniższy fragment kodu pokazuje, jak można użyć zmiennej statycznej nextAccountNumber do przypisania unikalnych numerów kont do każdego nowego konta:

Przykład

// 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());
  }
}

Wyjście

Wartość nextAccountNumber po utworzeniu konta 1: 1001 Wartość nextAccountNumber po utworzeniu konta 2: 1002 Wartość nextAccountNumber po utworzeniu konta 3: 1003
W tym przykładzie metoda main tworzy trzy instancje klasy BankAccount . Konstruktor BankAccount przypisuje do nowego rachunku wartość nextAccountNumber i zwiększa zmienną nextAccountNumber o 1. Metoda getAccountNumber zwraca numer rachunku każdego rachunku. Metoda main następnie wypisuje numer konta i zmienną nextAccountNumber dla każdego konta. Możesz zobaczyć, że każdy numer konta jest unikalny, a zmienna nextAccountNumber jest zwiększana o jeden dla każdego nowo utworzonego konta. Zmiennych statycznych można również użyć do zaimplementowania wzorca projektowego Singleton, w którym można utworzyć tylko jedną instancję klasy. Klasa singleton to klasa, która może mieć tylko jedną instancję w dowolnej aplikacji Java i jednocześnie zapewnia globalny punkt dostępu do tej instancji. Poniższy fragment kodu pokazuje, jak można wykorzystać instancję zmiennej statycznej do implementacji klasy singleton:

Przykład

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();
    }
}

Wyjście

To jest klasa singleton. To jest klasa singleton. To jest klasa singleton
W tym przykładzie metoda main tworzy trzy instancje klasy Singleton , wywołując metodę getInstance() . Metoda getInstance () zwraca instancję klasy i tworzy nową instancję, jeśli taka nie istnieje. Metoda displayMessage po prostu wyświetla komunikat . Następnie metoda main wywołuje metodę displayMessage dla każdej instancji. Jak widać, mimo że tworzymy trzy instancje, tworzony jest tylko jeden obiekt, który jest udostępniany wszystkim instancjom. Dowodzi to, że tworzona jest tylko jedna instancja klasy i jest ona współdzielona pomiędzy wszystkimi instancjami, a zmienna statyczna „instancja” jest utrzymywana. Należy pamiętać, że wartość zmiennej statycznej jest wspólna dla wszystkich instancji klasy, więc zmiany wprowadzone w zmiennej przez jedną instancję będą widoczne dla wszystkich pozostałych instancji. Należy zwrócić szczególną uwagę na zmienne statyczne, aby uniknąć potencjalnych konfliktów i błędów w kodzie. Na przykład nie jest zalecane używanie zmiennej statycznej do przechowywania wartości specyficznej dla instancji klasy, takiej jak saldo konta. Aby utrwalić zdobytą wiedzę, sugerujemy obejrzenie lekcji wideo z naszego kursu Java

Wniosek

Podsumowując, zmienna statyczna w Javie umożliwia współdzielenie danych pomiędzy wszystkimi instancjami klasy. Można ich używać do zmiennych współdzielonych przez wszystkie instancje, takich jak liczniki i stałe, lub do implementacji wzorca projektowego Singleton. Należy jednak pamiętać, że wartość zmiennej statycznej jest wspólna dla wszystkich instancji klasy, więc zmiany zmiennej wprowadzone przez jedną instancję będą widoczne dla wszystkich pozostałych instancji.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION