CodeGym /Java Blog /Random-IT /Variabili statiche in Java
John Squirrels
Livello 41
San Francisco

Variabili statiche in Java

Pubblicato nel gruppo Random-IT

Cosa sono le variabili statiche?

Le variabili statiche o le variabili di classe sono condivise tra tutte le istanze di una classe ed è possibile accedervi e modificarle senza creare un'istanza della classe. Facciamo un tuffo nel profondo per comprendere gli usi e l'implementazione delle variabili statiche in Java.

Esempio di variabile statica in Java

Uno degli usi più comuni delle variabili statiche è la condivisione tra tutte le istanze di una classe. Ad esempio, una variabile contatore che tiene traccia del numero di istanze create o una variabile CONSTANT che contiene un valore che non cambia mai. Consideriamo una classe che rappresenta un conto bancario. Il seguente frammento di codice mostra come è possibile utilizzare una variabile statica nextAccountNumber per assegnare numeri di conto univoci a ciascun nuovo account:

Esempio


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

Produzione

Valore di nextAccountNumber dopo aver creato account1: 1001 Valore di nextAccountNumber dopo aver creato account2: 1002 Valore di nextAccountNumber dopo aver creato account3: 1003
In questo esempio, il metodo main crea tre istanze della classe BankAccount . Il costruttore BankAccount assegna nextAccountNumber al nuovo conto e incrementa la variabile nextAccountNumber di 1. Il metodo getAccountNumber restituisce il numero di conto di ciascun conto. Il metodo principale stampa quindi il numero di conto e la variabile nextAccountNumber per ciascun conto. Puoi vedere che ogni numero di conto è univoco e la variabile nextAccountNumber viene incrementata di uno per ogni nuovo conto creato. Le variabili statiche possono essere utilizzate anche per implementare il modello di progettazione Singleton, in cui è possibile creare solo un'istanza di una classe. Una classe singleton è una classe che può avere una sola istanza in qualsiasi applicazione Java e contemporaneamente fornisce un punto di accesso globale a questa istanza. Il seguente frammento di codice mostra come è possibile utilizzare un'istanza di variabile statica per implementare una classe singleton:

Esempio


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

Produzione

Questa è una classe singleton Questa è una classe singleton Questa è una classe singleton
In questo esempio, il metodo main crea tre istanze della classe Singleton chiamando il metodo getInstance() . Il metodo getInstance() restituisce l'istanza della classe e crea una nuova istanza se non ne esiste una. Il metodo displayMessage stampa semplicemente un messaggio. Quindi il metodo main chiama il metodo displayMessage per ogni istanza. Come puoi vedere, anche se stiamo creando tre istanze, viene creato e condiviso solo un oggetto tra tutte le istanze. Dimostra che solo un'istanza della classe viene creata e condivisa tra tutte le istanze e che la variabile statica "istanza" è mantenuta. È importante ricordare che il valore di una variabile statica è condiviso tra tutte le istanze di una classe, quindi le modifiche alla variabile apportate da un'istanza saranno visibili a tutte le altre istanze. È necessario prestare particolare attenzione alle variabili statiche per evitare potenziali conflitti e bug nel codice. Ad esempio, non è consigliabile utilizzare una variabile statica per contenere un valore specifico di un'istanza di una classe, come il saldo di un conto. Per rafforzare ciò che hai imparato, ti suggeriamo di guardare una lezione video dal nostro corso Java

Conclusione

Per concludere, una variabile statica in Java consente la condivisione dei dati tra tutte le istanze di una classe. Possono essere utilizzati per variabili condivise tra tutte le istanze, come contatori e costanti o per implementare il modello di progettazione Singleton. Tuttavia, è importante tenere presente che il valore di una variabile statica è condiviso tra tutte le istanze di una classe, quindi le modifiche alla variabile apportate da un'istanza saranno visibili a tutte le altre istanze.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION