7
votes

Objet final en Java

Dupliqué possible: strong>
Quand utiliser final p>

Quelle est l'utilisation de déclarer final code> clés pour des objets? Par exemple: P>

final Object obj = new myclass();


1 commentaires

4 Réponses :


25
votes

Utiliser le mot-clé "final" fait la variable que vous déclarez immuables. Une fois initialement attribué, il ne peut être attribué à nouveau.

Cependant, cela ne signifie pas nécessairement que l'état de l'instance étant mentionné 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'une est une optimisation où, en déclarant une variable comme finale permet à la valeur d'être Mémoizedized .

Un autre scénario où vous utiliseriez une variable finale est lorsqu'une classe interne dans une méthode doit accéder à une variable dans la méthode de déclaration. Le code suivant illustre ceci: xxx

si x n'est pas déclaré "final", le code entraînera une erreur de compilation. La raison exacte pour avoir besoin d'être "finale" 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 modifiée.

Certains programmeurs préconisent également l'utilisation de "finale" pour empêcher la ré- attribuer des variables accidentellement là où ils ne devraient pas être. Sorte de règle de type "meilleure pratique".


0 commentaires

3
votes

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


0 commentaires

6
votes

Les variables finales ne peuvent pas être réaffectées. S'ils sont des périmètres de classe ou d'instance, ils doivent être attribués lorsqu'un objet est construit. Une utilisation: Constantes Vous ne voulez pas que quelqu'un d'autre utilise votre pour changer, par exemple. cordes ou constantes int (bien que Enums le fasse mieux en 1,5+). En outre, si vous souhaitez faire référence à une variable méthode d'étendue d'une méthode anonyme, vous définissez à l'intérieur de cette méthode, il doit être définitif, alors Java n'a donc pas à gérer ce qui se passerait si votre code a réaffecté cette variable plus tard, après sa création. Après sa création. Le cadre de pile local / périmètre de la méthode interne anonyme. On parle d'inclure une forme de fermeture dans Java 7 qui pourrait éviter cette restriction.

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


0 commentaires

7
votes

Une autre utilisation de la finale pour éviter tout changement 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;
}


0 commentaires