Palavra-chave final em Java
A palavra-chave final
em Java é um modificador sem acesso que pode ser aplicado a variáveis, métodos e classes. É usado para impedir que o usuário modifique ainda mais a entidade à qual é aplicado. Essa palavra-chave desempenha um papel fundamental para garantir a imutabilidade e impedir a herança ou a substituição de métodos.
Uso
1. final
Variáveis
Uma variável final
é uma constante; uma vez inicializada, seu valor não pode ser alterado.
final int MAX_VALUE = 100;
Inicialização de final
Variáveis
Uma variável final
deve ser inicializada quando for declarada ou em um construtor se for uma variável de instância.
public class FinalInitialization {
final int MAX_VALUE;
public FinalInitialization() {
MAX_VALUE = 100;
}
}
2. final
Métodos
Um método final
não pode ser substituído por subclasses, o que garante que a implementação do método permaneça inalterada.
class Parent {
public final void display() {
System.out.println("This is a final method.");
}
}
3. final
Classes
Uma classe final
não pode ser subclasse, o que impede a herança.
public final class FinalClass {
// Class implementation
}
Exemplos
Exemplo 1: final
Variável
public class FinalVariableExample {
public static void main(String[] args) {
final int MAX_VALUE = 100;
System.out.println("MAX_VALUE: " + MAX_VALUE);
// MAX_VALUE = 200; // This will cause a compilation error
}
}
Neste exemplo, MAX_VALUE
é uma variável final
. A tentativa de reatribuí-lo resultará em um erro de compilação.
Exemplo 2: final
Método
class Parent {
public final void display() {
System.out.println("This is a final method.");
}
}
class Child extends Parent {
// public void display() { // This will cause a compilation error
// System.out.println("Attempting to override.");
// }
}
public class FinalMethodExample {
public static void main(String[] args) {
Child obj = new Child();
obj.display();
}
}
Aqui, o método display
na classe Parent
está marcado como final
, impedindo que ele seja substituído na classe Child
.
Exemplo 3: final
Classe
public final class FinalClass {
public void show() {
System.out.println("This is a final class.");
}
}
// class SubClass extends FinalClass { // This will cause a compilation error
// }
public class FinalClassExample {
public static void main(String[] args) {
FinalClass obj = new FinalClass();
obj.show();
}
}
Neste exemplo, FinalClass
é declarado como final
, o que significa que não pode ser estendido por nenhuma outra classe.
Dicas e práticas recomendadas
- Imutabilidade: Use as variáveis
final
para criar constantes e garantir que seus valores permaneçam inalterados durante todo o programa. - Segurança: Use os métodos
final
para evitar que as subclasses alterem métodos críticos, o que pode ajudar a manter a segurança e a consistência. - Design: Use as classes
final
para impedir a herança ao projetar classes imutáveis ou quando você quiser garantir que a implementação da classe não possa ser alterada. - Variáveis finais estáticas: Ao contrário das variáveis finais de instância, as variáveis finais estáticas não podem ser atribuídas por meio de construtores. Normalmente, eles são inicializados em sua declaração.
public class FinalStaticExample { public static final double PI = 3.14159; }
- Desempenho: Em alguns casos, o uso de
final
pode ajudar o compilador Java e o compilador JIT a otimizar o código, pois fornece mais informações sobre a invariabilidade do valor.