CodeGym /Blogue Java /Random-PT /Variáveis estáticas em Java
John Squirrels
Nível 41
San Francisco

Variáveis estáticas em Java

Publicado no grupo Random-PT

O que são variáveis ​​estáticas?

Variáveis ​​estáticas ou variáveis ​​de classe são compartilhadas entre todas as instâncias de uma classe e podem ser acessadas e modificadas sem criar uma instância da classe. Vamos nos aprofundar para entender os usos e a implementação de variáveis ​​estáticas em Java.

Exemplo de variável estática em Java

Um dos usos mais comuns para variáveis ​​estáticas é compartilhar entre todas as instâncias de uma classe. Por exemplo, uma variável de contador que controla o número de instâncias criadas ou uma variável CONSTANT que contém um valor que nunca muda. Considere uma classe que representa uma conta bancária. O trecho de código a seguir mostra como uma variável estática nextAccountNumber pode ser usada para atribuir números de conta exclusivos a cada nova conta:

Exemplo


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

Saída

Valor de nextAccountNumber após a criação da conta1: 1001 Valor de nextAccountNumber após a criação da conta2: 1002 Valor de nextAccountNumber após a criação da conta3: 1003
Neste exemplo, o método principal cria três instâncias da classe BankAccount . O construtor BankAccount atribui nextAccountNumber à nova conta e incrementa a variável nextAccountNumber em 1. O método getAccountNumber retorna o número da conta de cada conta. O método principal então imprime o número da conta e a variável nextAccountNumber para cada conta. Você pode ver que cada número de conta é único e a variável nextAccountNumber é incrementada em um para cada nova conta criada. Variáveis ​​estáticas também podem ser usadas para implementar o padrão de design Singleton, onde apenas uma instância de uma classe pode ser criada. Uma classe singleton é uma classe que pode ter apenas uma instância em qualquer aplicativo Java e simultaneamente fornece um ponto de acesso global para esta instância. O trecho de código a seguir mostra como uma instância de variável estática pode ser usada para implementar uma classe singleton:

Exemplo


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

Saída

Esta é uma classe singleton Esta é uma classe singleton Esta é uma classe singleton
Neste exemplo, o método principal cria três instâncias da classe Singleton chamando o método getInstance() . O método getInstance() retorna a instância da classe e cria uma nova instância se não existir. O método displayMessage apenas imprime uma mensagem. Em seguida, o método principal chama o método displayMessage para cada instância. Como você pode ver, embora estejamos criando três instâncias, apenas um objeto é criado e compartilhado entre todas as instâncias. Isso prova que apenas uma instância da classe é criada e compartilhada entre todas as instâncias e a variável estática 'instância' é mantida. É importante lembrar que o valor de uma variável estática é compartilhado entre todas as instâncias de uma classe, portanto, as alterações feitas na variável por uma instância serão visíveis para todas as outras instâncias. Deve-se considerar cuidadosamente as variáveis ​​estáticas para evitar possíveis conflitos e bugs em seu código. Por exemplo, não é recomendado usar uma variável estática para armazenar um valor específico de uma instância de uma classe, como o saldo de uma conta. Para reforçar o que você aprendeu, sugerimos que você assista a uma vídeo aula do nosso Curso Java

Conclusão

Para finalizar, uma variável estática em Java permite o compartilhamento de dados entre todas as instâncias de uma classe. Eles podem ser usados ​​para variáveis ​​compartilhadas entre todas as instâncias, como contadores e constantes ou para implementar o padrão de design Singleton. No entanto, é importante ter em mente que o valor de uma variável estática é compartilhado entre todas as instâncias de uma classe, portanto, as alterações feitas na variável por uma instância serão visíveis para todas as outras instâncias.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION