final (Java)
En langage Java, le mot-clé final
indique qu'un élément ne peut être changé dans la suite du programme. Il peut s'appliquer aux méthodes et attributs d'une classe ainsi que la classe elle-même, Aussi il peut s'appliquer sur les paramètres d'une méthode et sur les variables locales. Selon le contexte, on utilise final
dans un souci de conception ou d'optimisation. C'est pourquoi il est parfois employé de façon incorrecte.
Méthodes
Une méthode indiquée comme final
ne peut être redéfinie dans une classe dérivée.
Exemple :
public class MaClass {
public final void uneMethode() {
...
}
}
On peut s'en servir pour forcer le comportement d'une méthode dans les sous-classes.
Attributs de classe ou d'objet
Appliqué à un attribut de type primitif, ce dernier devient une constante. L'affectation doit être effectuée, au plus tard, dans le constructeur de la classe. Le fonctionnement est un peu différent sur un type objet : c'est la référence vers l'objet qui devient constante et non sa valeur. Ce dernier point s'applique également aux tableaux qui sont aussi des références.
Exemple :
public final class MaClass {
public final double PI = 3.14159; // Impossible de modifier la valeur
public final double[] tailles = {50.2, 60.8};
public void uneMethode() {
tailles[0] = 99; // tailles est une référence sur un tableau
}
}
Classes
Les classes final
ne peuvent être dérivées.
Exemple :
public final class ClasseFinal {
...
}
Cela peut être fait dans un souci d'efficacité ou pour empêcher l'utilisateur d'en faire une utilisation non-appropriée dans la classe dérivée.
De nombreuses classes de la bibliothèque standard Java sont déclarées comme final
tel que java.lang.System
ou java.lang.String
.
paramètres de méthode
Le mot clef final peut aussi être utiliser pour le paramètre d'une méthode dont on est sûr qu'elle ne va pas changer de reference :
public static int addition(final int a, final int b){
return a + b;
}
Variables locales
Une autre utilisation du mot clef final est dans les variables locales, elle suit la même règle c'est qu'on est sûr que la variable ne va pas changer.
public static int ajouterCinq(final int a){
final int b = 5;
return a + b;
}
Voir aussi
Articles connexes
Liens externes
- (fr) http://bruce-eckel.developpez.com/livres/java/traduction/tij2/?page=page_8#LVIII-H : Article sur le mot-clé final (developpez.com)