Was macht "final", wenn Sie es vor einer Variable platzieren?
Sehr grundlegende Frage, aber was bedeutet "final" machen, wenn Sie legen Sie es, bevor Sie eine variable wie unten...
final EditText myTextField = (EditText) findViewById(R.id.myTextField);
Was bedeutet final
tun?
InformationsquelleAutor der Frage Jack Love | 2010-10-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze Antwort
Stoppt die "myTextField" variable zugewiesen wird, um etwas anderes.
Lange Antwort
Aus den oben genannten Gründen, habe ich immer die "final" - modifier, wo immer ich kann, um statische Felder, Instanz-Felder, lokale Variablen und Parameter der Methode. Es tut aufblasen der code ein wenig, aber für mich lohnt es sich, die extra Lesbarkeit und Robustheit.
InformationsquelleAutor der Antwort Andrew Swan
Dem Stichwort
final
in diesem Zusammenhang bedeutet, dass Sie nicht aktualisieren können den impliziten ZeigermyTextField
zu Punkt zu einem anderen Objekt (auch wenn Sie das Objekt ändern kann Spitzen, vonmyTextField
). Das Schlüsselwort kann auch verwendet werden, um zu verhindern, dass das überschreiben (wenn angewendet auf Klassen oder Methoden).Ein Grund, warum Sie dies sehen könnte ist, dass der anonyme Klassen, die Referenz lokale Variablen können nur auf Variablen verweisen gekennzeichnet
final
. Dies ist so, dass der anonyme Klassen müssen nur store eine doppelte Referenz und müssen nicht mit der Aufrechterhaltung der vollständigen Zugriff auf das lokale Funktion Stapel. Zum Beispiel:InformationsquelleAutor der Antwort Michael Aaron Safyan
Eine Sache, die keine der anderen Antworten gemerkt haben, dass ein
final
Attribut hat Besondere Eigenschaften, die sich vis-a-vis des Java-memory-Modell. Der Netto-Effekt ist, dass ein thread können sicher auf einefinal
Attribut-Wert ohne Einnahme Schritte, um die Synchronisierung mit anderen threads.FOLLOWUP
Die Spezifikation des Java-memory-Modell ist Teil der Java Language Specification, und (AFAIK) nicht geändert hat, seit Java 1.5. In diesem Sinne ist es nicht JVM-spezifisch.
Aber das Verhalten von Java, wenn Sie die Regeln nicht Folgen (d.h. wenn der code nicht richtig synchronisiert seine Verwendung freigegebenen Daten) hängt von allerlei Dingen ab, einschließlich der hardware führen Sie die Anwendung auf.
Unter anderem das Java-memory-Modell ist so konzipiert, dass multi-core-Maschinen laufen viele Java-threads, ohne ständig Spülen Sie die memory-caches ... die würden töten performance. Im Grunde, es gibt einige Regeln, die garantieren, dass ein Java-thread sieht, memory-Aktualisierungen aus einem anderen thread. Wenn eine Anwendung nicht die Regeln befolgen, es ist möglichdass ein thread sehen, eine veraltete (veraltet) Wert für einige Feld-geschrieben von einem anderen thread, was sich in gelegentlichen Undefiniertes Verhalten.
InformationsquelleAutor der Antwort Stephen C
Den
final
Schlüsselwort wird sichergestellt, dassmyTextField
hält die Referenz, was findViewByID() liefert, und lässt keine andere Aufgabe zumyTextField
variable, d.h. nach der Ausführung derWenn Sie versuchen, weisen einen beliebigen Wert zu myTextField, erhalten Sie einen compiler-Fehler.
InformationsquelleAutor der Antwort Suresh Kumar
Können Sie nicht ändern Sie die Referenz der
myTextField
sobald es zugeordnet ist. Mehr Informationen unten aus WikipediaInformationsquelleAutor der Antwort rkg
Wenn eine variable markiert ist, als letzten dann den Wert der variable nicht geändert werden, ich.e Schlüsselwort final bei einem Einsatz mit variabler macht es eine Konstante. Und wenn Sie versuchen, ändern Sie den Wert dieser Variablen im Laufe des Programms wird der compiler Ihnen einen Fehler.
InformationsquelleAutor der Antwort farhankhwaja
Dem Stichwort
final
erklärtmyTextField
als eine Konstante variable.InformationsquelleAutor der Antwort irrelephant