Java Static Explicado: Variáveis, Métodos e Blocos – Exemplos Práticos
Em Java, a palavra-chave static aparece em três contextos distintos: variáveis estáticas, métodos estáticos e blocos estáticos. Cada um desempenha papel único no ciclo de vida de uma classe e suas instâncias.
Variáveis Estáticas em Java
Uma variável estática é um campo de nível de classe inicializado apenas uma vez quando a classe é carregada pela primeira vez. Diferente de variáveis de instância, uma única cópia de uma variável estática é compartilhada por todos os objetos daquela classe.
- Apenas uma cópia existe, compartilhada entre todas as instâncias.
- Acessível diretamente via
NomeDaClasse.nomeVariavelsem criar objeto. - Inicializada antes de quaisquer campos de instância.
Sintaxe:
public static int contador;
Métodos Estáticos em Java
Métodos estáticos pertencem à classe, não a uma instância específica. Podem ser invocados sem criar objeto e só acessam dados estáticos.
- Podem chamar outros métodos estáticos, mas não métodos de instância.
- Invocados com
NomeDaClasse.nomeMetodo(). - Não podem usar
thisousuperpois não estão ligados a uma instância.
Todos os métodos main são estáticos para que a JVM inicie a aplicação antes de qualquer objeto existir.
Exemplo Prático: Usando Variáveis e Métodos Estáticos
Abaixo, um programa simples demonstrando como um contador estático é compartilhado entre múltiplos objetos Aluno.
public class Demo {
public static void main(String[] args) {
Aluno s1 = new Aluno();
s1.showData();
Aluno s2 = new Aluno();
s2.showData();
// Aluno.b++; // descomente para modificar o contador
// s1.showData();
}
}
class Aluno {
int a; // variável de instância, padrão 0
static int b; // contador estático, inicializado com 0 uma vez
Aluno() {
b++; // incrementa contador cada vez que Aluno é criado
}
public void showData() {
System.out.println("Valor de a = " + a);
System.out.println("Valor de b = " + b);
}
}
Compile e execute com java Demo para ver a saída:
O diagrama abaixo ilustra como variáveis de referência e objetos são criados, e como a variável estática b é compartilhada entre instâncias.
Para acessar a variável estática de fora da classe, use NomeDaClasse.nomeVariavel:
Aluno.b++; // incrementa o contador compartilhado
s1.showData(); // mostrará valor atualizado de b
Tentar acessar variável de instância de contexto estático resulta em erro de compilação:
error: non-static variable a cannot be referenced from a static context
a++;
Isso ocorre porque métodos estáticos não podem interagir diretamente com campos de instância.
Blocos Estáticos em Java
Um bloco estático é um bloco especial de código que executa uma vez quando a classe é carregada na JVM. É ideal para inicializar campos estáticos que requerem mais que uma simples atribuição.
class Teste {
static int a;
static int b;
static {
a = 10;
b = 20;
}
}
Executar o programa abaixo demonstra a saída de um bloco estático:
public class Demo {
static int a;
static int b;
static {
a = 10;
b = 20;
}
public static void main(String[] args) {
System.out.println("Valor de a = " + a);
System.out.println("Valor de b = " + b);
}
}
Saída:
Valor de a = 10 Valor de b = 20
Java
- Entendendo a Palavra-chave final em Java: Variáveis, Métodos e Classes
- Operador instanceof em Java: Guia Completo
- Entendendo Classes Aninhadas Estáticas em Java: Uso, Diferenças e Exemplos
- Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
- Padrão Singleton em Java Explicado: Como Implementar e Usar com Segurança
- Dominando Reflection em Java: Inspecionando Classes, Métodos e Campos em Tempo de Execução
- Dominando Tratamento de Exceções em Java: Try, Catch, Finally, Throw e Throws Explicados
- Dominando Java ObjectOutputStream: Serialização, Métodos e Exemplos Práticos
- Dominando Java Generics – Construindo Código Reutilizável e Type-Safe
- Dominando Operações de Arquivo em Java com java.io – Criação, Leitura, Escrita e Exclusão