Ce n' “final” de le faire si vous le placez devant une variable?
Question très simple, mais, que signifie "finale" faire si vous la placez à l'avant d'une variable telle que ci-dessous...
final EditText myTextField = (EditText) findViewById(R.id.myTextField);
Ce n' final
faire?
- Bien! Je pense que j'ai eu ma réponse! (6 réponses! WOW!) L'ensemble de ces travaux.
Vous devez vous connecter pour publier un commentaire.
Réponse Courte
Arrête le "myTextField" variable d'être affecté à autre chose.
Réponse Longue
Pour les raisons indiquées ci-dessus, j'applique toujours la "finale" modificateur où que je peux pour les champs statiques, des champs d'instance, les variables locales et les paramètres de la méthode. Il n'gonfler un peu le code, mais pour moi, il vaut la lisibilité et la robustesse.
Le mot-clé
final
, dans ce contexte, signifie que vous ne pouvez pas mettre à jour l'implicite pointeurmyTextField
pour pointer vers un objet différent (bien que vous pouvez modifier l'objet pointé parmyTextField
). Le mot-clé peut également être utilisé pour prévenir primordial (lorsqu'il est appliqué à des classes ou des méthodes).L'une des raisons pour lesquelles vous pourriez le voir c'est que les classes anonymes qui font référence à des variables locales ne peuvent faire référence à des variables marqué
final
. C'est ainsi que l'anonyme classes ont besoin de stocker uniquement une double référence et n'ont pas besoin de maintenir la complète de l'accès à la pile de fonction. Par exemple:Une chose qu'aucune des autres réponses ont noté, c'est que un
final
attribut a des propriétés particulières vis-a-vis de la Java du modèle de mémoire. L'effet net est que l'un thread peut accéder en toute sécurité à unfinal
valeur de l'attribut sans prendre des mesures pour se synchroniser avec d'autres threads.SUIVI
La spécification de Java modèle de mémoire est une partie de la Java Language Specification, et (autant que je sache) n'a pas changé depuis Java 1.5. En ce sens, ce n'est pas JVM spécifiques.
Cependant, le comportement de Java si vous ne suivez pas les règles (par exemple, si votre code n'est pas correctement synchroniser son utilisation de données partagée) dépend de toutes sortes de choses, y compris le matériel que vous exécutez l'application sur.
Entre autres choses, la Java de la mémoire de modèle est conçu pour permettre le multi-core machines pour exécuter plusieurs threads Java sans avoir à continuellement vider les caches de mémoire ... ce qui voudrait tuer la performance. Fondamentalement, il indique quelques règles qui garantissent qu'un fil de Java voit mémoire des mises à jour à partir d'un autre thread. Si une application ne respecte pas les règles, il est possible qu'un thread va voir un rassis (de la date) de la valeur dans un champ écrite par un autre thread, ce qui entraîne occasionnel comportement indéfini.
La
final
mot clé sera de s'assurer quemyTextField
détient la référence de ce findViewByID() renvoie et interdit toute autre affectation àmyTextField
variable c'est à dire après l'exécution de laSi vous essayez d'assigner une valeur à myTextField, vous obtiendrez une erreur de compilation.
Vous ne pouvez pas modifier la référence de
myTextField
une fois qu'il est attribué. Plus d'informations ci-dessous à partir de WikipédiaSi une variable est marqué comme final alors la valeur de la variable ne peut pas être changé, j'.e le mot-clé final lorsqu'il est utilisé avec une variable en fait une constante. Et si vous essayez de modifier la valeur de cette variable au cours de votre programme, le compilateur vous donnera une erreur.
Le mot-clé
final
déclaremyTextField
comme une constante variable.En essayant d'expliquer l'utilisation de
final
modificateur de flux de code:De sortie: