mot-clé final en Java
Le mot-clé final
en Java est un modificateur de non-accès qui peut être appliqué aux variables, aux méthodes et aux classes. Il est utilisé pour empêcher l'utilisateur de modifier davantage l'entité à laquelle il s'applique. Ce mot-clé joue un rôle crucial en garantissant l'immutabilité et en empêchant l'héritage ou la superposition de méthodes.
Utilisation
1. final
Variables
Une variable final
est une constante ; une fois initialisée, sa valeur ne peut être modifiée.
final int MAX_VALUE = 100;
Initialisation de la final
Variables
Une variable final
doit être initialisée lors de sa déclaration ou dans un constructeur s'il s'agit d'une variable d'instance.
public class FinalInitialization {
final int MAX_VALUE;
public FinalInitialization() {
MAX_VALUE = 100;
}
}
2. final
Méthodes
Une méthode final
ne peut pas être remplacée par des sous-classes, ce qui garantit que l'implémentation de la méthode reste inchangée.
class Parent {
public final void display() {
System.out.println("This is a final method.");
}
}
3. final
Classes
Une classe final
ne peut pas être sous-classée, ce qui empêche l'héritage.
public final class FinalClass {
// Class implementation
}
Exemples
Exemple 1 : final
Variable
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
}
}
Dans cet exemple, MAX_VALUE
est une variable final
. Si vous tentez de le réaffecter, vous obtiendrez une erreur de compilation.
Exemple 2 : final
Méthode
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();
}
}
Ici, la méthode display
de la classe Parent
est marquée comme final
, ce qui l'empêche d'être remplacée par la classe Child
.
Exemple 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();
}
}
Dans cet exemple, FinalClass
est déclaré comme final
, ce qui signifie qu'il ne peut être étendu par aucune autre classe.
Conseils et bonnes pratiques
- Immutabilité: Utilisez les variables
final
pour créer des constantes et vous assurer que leurs valeurs restent inchangées tout au long du programme. - La sécurité: Utilisez les méthodes
final
pour empêcher les sous-classes de modifier les méthodes critiques, ce qui peut contribuer à maintenir la sécurité et la cohérence. - Conception: Utilisez les classes
final
pour empêcher l'héritage lorsque vous concevez des classes immuables ou lorsque vous voulez vous assurer que l'implémentation de la classe ne peut pas être modifiée. - Variables statiques finales: Contrairement aux variables finales d'instance, les variables finales statiques ne peuvent pas être attribuées via les constructeurs. Ils sont généralement initialisés dans leur déclaration.
public class FinalStaticExample { public static final double PI = 3.14159; }
- Performance: Dans certains cas, l'utilisation de
final
peut aider le compilateur Java et le compilateur JIT à optimiser le code, car elle fournit davantage d'informations sur l'invariabilité de la valeur.