1. endgültige Modifikation
Die durch die endgültigen Abschlüsse geänderten Klassen können nicht vererbt werden, sodass die Mitgliedermethoden der endgültigen Klasse nicht überschrieben werden können, und die durch endgültigen Schlüsselwörter geänderten Klassen haben keine Unterklassen, sodass die Implementierungsdetails der Klasse nicht geändert werden können und nicht erweitert werden können. Alle Mitgliedsmethoden in der endgültigen Klasse werden implizit als endgültige Methoden angegeben, und die Mitgliedsvariablen in der endgültigen Klasse können nach Bedarf auf endgültig eingestellt werden.
2. Verfahren zur endgültigen Modifikationsmethode
Wenn eine Methode in einer Klasse durch das endgültige Schlüsselwort geändert wird, kann ihre Unterklasse die Methode nicht überschreiben und kann nur von der Unterklasse vererbt werden. Wenn eine Methode in der übergeordneten Klasse nicht durch ihre Unterklasse überschrieben werden möchte, kann die Methode als Endtyp definiert werden. Darüber hinaus darf die private Methode in der übergeordneten Klasse (d. H. Die durch das private Schlüsselwort geänderte Methode) von der Unterklasse nicht überschrieben werden. Daher ist die durch das private Schlüsselwort in der übergeordnete Klasse geänderte Methode standardmäßig zum endgültigen Typ. Die durch das endgültige Schlüsselwort modifizierte Methode hat die folgenden Eigenschaften:
Diese Methode ist gesperrt und verhindert, dass eine Vererbungsklasse ihre Bedeutung und Implementierung verändert.
Effizient. Wenn der Compiler auf die endgültige Methode aufruft, tritt er in den eingebetteten Mechanismus ein und verbessert die Ausführungseffizienz erheblich.
Darüber hinaus können statische Methoden, die die endgültige Modifikation verwenden, nicht in Unterklassen ihrer Klasse versteckt werden, zu der sie gehören.
3.. Endgültige Modifikationsvariablen
Die Bedeutung des Schlüsselworts Finale lautet "das ist unersetzlich" oder "endgültiger Zustand".
Warum also die Veränderung stoppen?
Der Erfinder der Java -Sprache kann Änderungen aufgrund von zwei Zwecken verhindern:
A. Effizienzprobleme:
Bestimmte Methoden bestimmter Klassen in JDK dürfen von Benutzern nicht überschrieben werden. Der Designer könnte denken, dass die verwendete Methode die beste Methode ist.
Wenn der Benutzer es privat abdeckt oder es aufgrund von Fahrlässigkeit bedeckt, wirkt sich dies auf die Systemfunktionen des JVM oder des Systems aus.
B. Entwurfsanforderungen:
Wie wir alle wissen, müssen einige Fälle endgültige Schlüsselwörter verwenden, z. B. die Parameterübergabe anonymer innerer Klassen in der Methode.
Einige Leute sagen, dass die endgültigen Variablen nach der Zuordnung unveränderlich sind.
Was genau bedeutet dieser Unchang?
Diese Invariante bezieht sich auf eine Referenz, eine Adresse und der Inhalt des referenzierten Objekts.
Das heißt, diese endgültige Variable zeigt immer auf ein Objekt, ist ein konstanter Zeiger, kein Zeiger auf eine Konstante.
(1) Der durch das endgültige Schlüsselwort geänderte grundlegende Datentyp kann nach der Initialisierung nicht geändert werden.
(2) Wenn es sich um eine Variable des Referenztyps handelt, kann es nach der Initialisierung nicht auf ein anderes Objekt verweisen, aber der Inhalt des durch die Referenz angezeigten Objekts kann sich ändern. Der Grund ist: Die Adresse des Referenzobjekts, das im Heap -Speicher des Referenzdatentyps gespeichert ist. Nach den endgültigen Modifikationen des Referenztyps kann der Heap -Speicherraum durch die Referenz (oder die in der Referenz gespeicherte Heap -Speicheradresse) nicht geändert werden.
Bei der Änderung einer nicht statischen Mitgliedsvariable einer Klasse gibt es zwei Möglichkeiten, Mitgliedervariablen zu initialisieren:
(3) Initialisieren Sie während der Deklaration (4) initialisieren, wenn eine Variable deklariert werden. Die Variable wird als leer als endgültig bezeichnet, dh endgültig leer, aber der Anfangswert muss dieser Variablen in allen Konstruktoren der Klasse zugewiesen werden, in der sich die Variable befindet.
Wenn Sie die statische Mitgliedsvariable einer Klasse endgültig ändern, gibt es zwei Möglichkeiten, die statische Mitgliedsvariable zu initialisieren:
(5) Initialisieren, wenn Sie (6) im statischen Initialisierungsblock initialisieren, wenn die endgültige Änderung der statischen Variablen der Schnittstelle nur eine Möglichkeit zum Initialisieren besteht:
(7) Initialisieren Sie bei der Erklärung. Wenn Sie die variablen lokale Mitgliedsvariablen verwenden, müssen Sie nur sicherstellen, dass die Zuordnung vor der Verwendung initialisiert wird.
Kurz gesagt, Variablen, die durch das endgültige Schlüsselwort modifiziert wurden, können bei der Deklaration nicht initialisiert werden. Es muss jedoch sichergestellt werden, dass die Variable vor der Verwendung initialisiert wird. Sobald es initialisiert und zugewiesen wurde, kann es nicht neu zugewiesen werden. Versuchen Sie, die Ausgabeergebnisse des Programms zu analysieren:
public class test {public static void main (String [] args) {string a = "hello2"; endgültige Zeichenfolge b = "Hallo"; Zeichenfolge d = "Hallo"; Zeichenfolge C = B + 2; String E = D + 2; System.out.println ((a == c)); System.out.println ((a == e)); }} 4. Die endgültigen Modifikationsparameter
Wenn der Methodeparameter endgültig ist, können Sie diesen Parameter lesen und verwenden, aber Sie können den Wert des Parameters nicht ändern. Diese Variable wird erstellt, wenn die Methode aufgerufen und in den entsprechenden Parameterwert initialisiert wird. Sein Wert kann nicht geändert werden, bevor die Methodekörper ausgeführt wird. Der Parameterwert des mit dem endgültigen Schlüsselwort geänderten grundlegenden Datentyps kann nicht geändert werden. Der mit dem endgültigen Schlüsselwort geänderte Referenzdatentyp kann nicht die Referenz sein, die auf ein anderes Objekt verweist oder Null erneut zugewiesen wird, aber der Inhalt des Referenzobjekts kann unter Verwendung dieser Referenz geändert werden. Der Zweck der endgültigen Änderung von Parametern besteht nicht darin, zu verhindern, dass der Betrieb des Parameters den Wert der entsprechenden Variablen außerhalb der Methode innerhalb der aufgerufenen Methode ändert, sondern um den Neuzuweisungsbetrieb des Parameters innerhalb der Methode zu verhindern, was den Anfangswert beeinflusst, wenn der Parameter übergeben wird. Darüber hinaus kann das Ändern von Parametern in der Methode mit dem endgültigen Schlüsselwort nicht verhindern, dass der Wert des Werts des von der Veränderung der Methode übergebenen Parameters. Weitere Informationen finden Sie in der Erläuterung der endgültigen Änderungsreferenzdatentyp.