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
finalpour 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
finalpour 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
finalpour 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
finalpeut aider le compilateur Java et le compilateur JIT à optimiser le code, car elle fournit davantage d'informations sur l'invariabilité de la valeur.