Modificadores Java
Os modificadores Java são palavras-chave que você usa para alterar as propriedades de classes, métodos e variáveis. Eles definem a acessibilidade, o comportamento e o escopo desses componentes. Os modificadores são divididos em duas categorias: modificadores de acesso e modificadores sem acesso.
Modificadores de acesso
Os modificadores de acesso controlam a visibilidade de classes, métodos e variáveis. Os quatro modificadores de acesso em Java são:
- public: O membro pode ser acessado de qualquer outra classe.
- protegido: O membro pode ser acessado em seu próprio pacote e por subclasses.
- padrão (sem palavra-chave): O membro pode ser acessado somente em seu próprio pacote.
- particular: O membro pode ser acessado somente em sua própria classe.
Exemplo de modificadores de acesso
public class Example {
public int publicVar;
protected int protectedVar;
int defaultVar; // default access
private int privateVar;
public void display() {
System.out.println("Public Variable: " + publicVar);
System.out.println("Protected Variable: " + protectedVar);
System.out.println("Default Variable: " + defaultVar);
System.out.println("Private Variable: " + privateVar);
}
}
Neste exemplo, publicVar
pode ser acessado de qualquer lugar, protectedVar
pode ser acessado dentro do pacote e das subclasses, defaultVar
pode ser acessado dentro do pacote e privateVar
pode ser acessado somente dentro da classe Example
.
Modificadores sem acesso
Os modificadores sem acesso oferecem funcionalidades adicionais, como controle de herança, garantia de imutabilidade e definição de propriedades especiais. Alguns modificadores comuns de não acesso são:
- estático: Indica que o membro pertence à classe, e não a instâncias da classe.
- final: Usado para declarar constantes, impedir a substituição de métodos e a herança.
- abstrato: Usado para declarar classes e métodos abstratos.
- sincronizado: Usado em multithreading para garantir que um método ou bloco seja acessado por apenas um thread de cada vez.
- volátil: Garante que o valor de uma variável seja sempre lido da memória principal.
- transitório: Evita a serialização de campos de classe.
Exemplo de modificadores de não acesso
public class NonAccessExample {
public static final int CONSTANT = 100;
public static void main(String[] args) {
System.out.println("Constant Value: " + CONSTANT);
}
}
Neste exemplo, CONSTANT
é uma variável estática e final, o que significa que ela pertence à classe e não pode ser alterada.
Dicas e práticas recomendadas
- Use os modificadores de acesso com sabedoria: Restrinja o acesso tanto quanto possível para proteger seus dados. Use
private
para campos, a menos que eles precisem ser acessados fora da classe. - Uso estático: Use
static
para métodos utilitários e constantes que não exijam o estado do objeto. - Final para constantes: Declare as constantes usando
final
estatic
para evitar modificações. - Classes abstratas: Use as classes
abstract
como classes de base que não devem ser instanciadas diretamente. - Sincronizado para segurança da rosca: Use o site
synchronized
para garantir a segurança da rosca quando necessário, mas esteja ciente dos possíveis impactos no desempenho. - Volátil para visibilidade: Use
volatile
para variáveis compartilhadas entre threads para garantir a visibilidade das alterações. - Transiente para serialização: Use
transient
para excluir campos da serialização quando eles não devem fazer parte do objeto serializado.