Static e Final
Membros de classe e valores imutáveis
A palavra-chave static indica que um membro pertence à classe em si, e não a nenhuma instância específica. Isso significa que você pode chamar um método ou acessar um campo estático sem criar nenhum objeto — basta usar o nome da classe.
final indica imutabilidade ou bloqueio de extensão: uma variável final não pode ser reatribuída após a inicialização, um método final não pode ser sobrescrito em subclasses, e uma classe final não pode ser estendida. String em Java é final — por isso é imutável.
Combinar static e final é a forma idiomática de criar constantes em Java: public static final double PI = 3.14159. Por convenção, constantes são escritas em SNAKE_CASE com letras maiúsculas.
public class Matematica {
// Constante: static + final + MAIÚSCULAS por convenção
public static final double PI = 3.14159265358979;
public static final double E = 2.71828182845904;
// Método estático: chamado sem criar objeto
public static double areaCirculo(double raio) {
return PI * raio * raio;
}
public static double potencia(double base, int exp) {
double resultado = 1;
for (int i = 0; i < exp; i++) resultado *= base;
return resultado;
}
// Campo estático: compartilhado por TODAS as instâncias
private static int totalInstancias = 0;
public Matematica() {
totalInstancias++; // incrementa a cada new Matematica()
}
public static int getTotalInstancias() {
return totalInstancias;
}
}
// Uso — sem criar objeto
double area = Matematica.areaCirculo(5.0); // 78.539...
double cubo = Matematica.potencia(3, 3); // 27.0
new Matematica();
new Matematica();
System.out.println(Matematica.getTotalInstancias()); // 2Métodos de utilitário puro (Math.sqrt, Collections.sort, Arrays.fill) são estáticos porque não dependem de estado de instância. Se o método não usa this, considere torná-lo static.