2010-07-17 3 views
6

Possible en double:
When to use finalobjet final en java

Quelle est l'utilisation de déclarer final mot-clé pour les objets? Par exemple:

final Object obj = new myclass(); 
+2

Voir [Quand utiliser final] (http://stackoverflow.com/questions/154314/when-to-use-final) –

Répondre

21

L'utilisation du mot-clé "final" rend la variable que vous déclarez immuable. Une fois attribué initialement, il ne peut pas être réaffecté.

Cependant, cela ne signifie pas nécessairement que l'état de l'instance référencée par la variable est immuable, seule la référence elle-même.

Il y a plusieurs raisons pour lesquelles vous utiliseriez le mot-clé "final" sur les variables. L'un est l'optimisation où en déclarant une variable comme finale permet à la valeur d'être memoized. Un autre scénario où vous utiliseriez une variable finale est quand une classe interne dans une méthode doit accéder à une variable dans la méthode de déclaration. Le code suivant illustre ceci:

public void foo() { 

     final int x = 1; 

     new Runnable() { 


      @Override 
      public void run() { 
       int i = x; 
      } 

     }; 

} 

Si x n'est pas déclaré comme "final", le code entraînera une erreur de compilation. La raison exacte de la nécessité d'être "final" est que la nouvelle instance de classe peut survivre à l'invocation de la méthode et a donc besoin de sa propre instance de x. Afin d'éviter d'avoir plusieurs copies d'une variable mutable dans la même portée, la variable doit être déclarée finale afin qu'elle ne puisse pas être changée.

Certains programmeurs préconisent également l'utilisation de «final» pour éviter de réattribuer accidentellement des variables là où elles ne devraient pas l'être. Tri d'une règle de type "meilleure pratique".

3

Il déclare une variable qui ne peut pas être modifiée une fois initialisée. Sort de readonly.

6

Les variables finales ne peuvent pas être réaffectées. S'il s'agit d'une classe ou d'une instance, elles doivent être affectées lors de la construction d'un objet. Une utilisation: constantes que vous ne voulez pas que quelqu'un d'autre utilise votre, par exemple. string ou int constantes (bien que les enums font mieux dans 1.5+). En outre, si vous voulez référencer une variable de méthode-portée à partir d'une méthode anonyme définie à l'intérieur de cette méthode, elle doit être finale, afin que Java n'ait pas à gérer ce qui se passerait si votre code réattribuait cette variable plus tard. le cadre/l'étendue de la pile locale pour la méthode anonyme interne. Il est question d'inclure une forme de fermeture dans Java 7 qui pourrait éviter cette restriction.

J'ai peut-être raté un peu la terminologie - désolé! mais c'est l'idée générale.

6

Une autre utilisation de finale pour éviter de changer accidentellement:

public String foo(int a) { 
    final String s; 
    switch(a) { 
    case 0: 
    s="zero"; 
    break; 
    case 1: 
    s="one"; 
    //forgot break; 
    default: 
    s="some number"; 
    } 
    return s; 
} 

Cela ne compilera pas car si un == 1, s serait attribué deux fois, en raison de la pause manquante. Final peut aider dans les déclarations de commutateur méchant.

Questions connexes