Oui, pardon, je me suis trompé de page.
Sauf les finales visiblement (cf l'articule sus-mentionné)
En fait, c'est plus compliqué que ça, là c'est une ambiguïté de Java.
Il existe deux genres de variables finales :
- Les expressions constantes. Une variable finale initialisée à sa déclaration par une expression constante, devient elle-même une expression constante.
4 étant une expression constante, j est aussi une expression constante dans tout son scope.
- Les autres. Celles qui ne sont pas initialisées dans leur déclaration, ou alors par une expression non-constante.
final int j = Math.min(4, 5);
Un appel de méthode n'est pas une expression constante, le compilateur ne peut pas évaluer son résultat.
j ne sera donc pas une expression constante.
Donc : en Java, une expression constante est évaluée directement par le compilateur, bien avant le chargement de la classe ou l'appel du constructeur.
Une telle chose est impossible avec les expressions non-constantes.
Ce qui conduit, hélas, à deux genres différents de variables final, différents en terme de à quel moment elles sont initialisées, et est-il possible de les choper non-initialisées. En pratique, cette différence ne se voit pas souvent. Et elle est fuie comme la peste par les habitués.
Partager