Final wird in Java nicht häufig verwendet, bietet uns jedoch Funktionen wie das Definieren von Konstanten in der C-Sprache. Darüber hinaus können Sie mit final steuern, ob Ihre Mitglieder, Methoden oder eine Klasse überschrieben werden können Andere Funktionen, diese Eigenschaften machen endgültig einen unverzichtbaren Platz in Java, und es ist auch eines der Schlüsselwörter, die man beim Erlernen von Java kennen und beherrschen muss.
finales Mitglied
Wenn Sie eine Variable in einer Klasse definieren, fügen Sie davor das Schlüsselwort final ein. Das bedeutet, dass die Variable nach der Initialisierung nicht mehr geändert werden kann. Die Bedeutung von „unveränderbar“ gilt hier für Basistypen. Sein Wert ist unveränderlich, aber bei Objektvariablen kann seine Referenz nicht geändert werden. Die Initialisierung kann an zwei Stellen erfolgen: Eine befindet sich bei ihrer Definition, d. h. ihr wird direkt ein Wert zugewiesen, wenn die endgültige Variable definiert wird, und die andere befindet sich im Konstruktor. Sie können nur einen dieser beiden Orte auswählen, entweder einen Wert zum Zeitpunkt der Definition angeben oder einen Wert im Konstruktor angeben. Sie können zum Zeitpunkt der Definition keinen Wert angeben und gleichzeitig einen anderen Wert im Konstruktor angeben. Der folgende Code demonstriert dies:
import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;
public class Bat{
final PI=3.14 ; // Der Adresswert wird bei der Definition von
final int i angegeben; Auch das Gleiche wie oben 🎜> Bat(){
i=100;
list=new LinkedList();
}
Bat(int ii,List l){
i= ii;
list=l;
}
public static void main(String[] args){
Bat b= new Bat();
b.list.add(new Bat( ));
//b.i=25;
.list.getClass());
b=new Bat(23, new ArrayList());
b.list.add(new Bat());
System.out.println("I ="+b.i+" List Type:"+b.list.getClass( ));
}
}
Dieses Programm demonstriert lediglich die herkömmliche Verwendung von final. Die Verwendung der Initialisierung im Konstruktor bietet Ihnen hier ein wenig Flexibilität. Wie in den beiden überladenen Konstruktoren von Bat gezeigt, stellt Ihnen der erste Standardkonstruktor einen Standardwert bereit, und der überladene Konstruktor initialisiert die endgültige Variable entsprechend dem von Ihnen bereitgestellten Wert oder Typ. Manchmal benötigen Sie diese Flexibilität jedoch nicht. Sie müssen beim Definieren nur den Wert angeben und niemals ändern. In diesem Fall sollten Sie diese Methode nicht verwenden. In der Hauptmethode gibt es zwei auskommentierte Anweisungen. Wenn Sie die Kommentare entfernen, wird das Programm nicht kompiliert. Dies bedeutet, dass der Wert von i oder der Typ der Liste nach der Initialisierung nicht geändert werden kann . Allerdings kann b neu initialisiert werden, um den Wert von i oder den Listentyp anzugeben, wie in der Ausgabe gezeigt:
I=100 List Type:class java.util.LinkedList
I=23 List Type:class java .util.ArrayList
Eine andere Verwendung besteht darin, die Parameter in der Methode als endgültig zu definieren. Für Basistypvariablen hat dies keine praktische Bedeutung, da Basistypvariablen beim Aufruf der Methode als Wert übergeben werden Sie können diese Parametervariable in der Methode ändern, ohne dass dies Auswirkungen auf die aufrufende Anweisung hat. Dies ist jedoch für Objektvariablen sehr praktisch, da der Objektvariablen bei der Übergabe ihre Referenz übergeben wird, sodass Ihre Änderung der Objektvariablen in der Methode nicht erfolgt Dies wirkt sich auf die Objektvariablen in der aufrufenden Anweisung aus. Wenn Sie die Objektvariablen nicht als Parameter in der Methode ändern müssen, können Sie durch die explizite Verwendung von final verhindern, dass Sie sie unbeabsichtigt ändern und die aufrufende Methode beeinflussen.
Wenn die innere Klasse in der Methode außerdem die Parametervariable in der Methode verwendet, muss die Parametervariable auch als endgültig deklariert werden, bevor sie verwendet werden kann, wie im folgenden Code gezeigt:
public class INClass{
void innerClass(final String str){
class IClass{
IClass(){
System.out.println(str);
}
}
IClass ic=new IClass();
}
public static void main(String[] args){
INClass inc=new INClass();
inc. innerClass("Hello");
}
}
final method
Wenn Sie die Methode als final deklarieren, wissen Sie bereits, dass die von dieser Methode bereitgestellten Funktionen Ihre Anforderungen erfüllt haben und dies nicht sein müssen Und jede Klasse, die von dieser Klasse ausgeht, darf diese Methode nicht überschreiben, kann diese Methode aber dennoch fortsetzen, was bedeutet, dass sie direkt verwendet werden kann. Es gibt auch einen Mechanismus namens Inline, mit dem Sie den Methodenkörper beim Aufrufen der endgültigen Methode direkt in den Aufrufpunkt einfügen können, anstatt routinemäßige Methodenaufrufe wie das Speichern von Haltepunkten, das Verschieben des Stapels usw. durchzuführen, was zu Problemen führen kann Dies verbessert die Effizienz Ihres Programms. Wenn Ihr Methodenkörper jedoch sehr groß ist oder Sie diese Methode an mehreren Stellen aufrufen, wird sich Ihr aufrufender Körpercode schnell vergrößern, was sich auf die Effizienz auswirken kann. Sie sollten ihn daher mit Vorsicht verwenden. final definiert die Methode.
finale Klasse
Wenn Sie final für eine Klasse verwenden, müssen Sie sorgfältig überlegen, da eine finale Klasse von niemandem fortgesetzt werden kann, was bedeutet, dass diese Klasse ein Fortsetzungsbaum in einer Fortsetzungsbaumklasse ist Das Design dieser Klasse wurde ohne Modifikation oder Erweiterung als perfekt angesehen. Für Mitglieder in Abschlussklassen können Sie sie als Abschlussklassen definieren oder nicht. Was Methoden betrifft, so werden sie natürlich endgültig, da die Klasse, zu der sie gehören, endgültig ist. Sie können der Methode in der Final-Klasse auch explizit ein Finale hinzufügen, aber das ist offensichtlich bedeutungslos.
Das folgende Programm demonstriert die Verwendung von Final-Methoden und Final-Klassen:
final class final{
final String str="final Data";
public String str1="non final data";
final public void print(){
System.out.println("final method.");
}
public void what(){
System.out.println(str+"n" +str1);
}
}
public class FinalDemo { //extends final can continue
public static void main(String[] args){
final f=new final();
f.what();
f.print();
}
}
Wie aus dem Programm ersichtlich ist, gibt es fast keinen Unterschied zwischen der Verwendung von Abschlussklassen und gewöhnlichen Klassen Klassen, mit der Ausnahme, dass geerbte Merkmale verloren gehen. Der Unterschied zwischen endgültigen Methoden und nicht endgültigen Methoden ist in der Programmzeile ebenfalls schwer zu erkennen. Denken Sie jedoch daran, sie mit Vorsicht zu verwenden.
Die Anwendung von final in Designmustern
Es gibt ein Muster in Designmustern, das Unveränderlichkeitsmuster genannt wird. Dieses Muster kann in Java einfach über das Schlüsselwort final implementiert werden. Das Programm Bat ist ein Beispiel eines unveränderlichen Musters. Wenn Sie daran interessiert sind, können Sie sich auf die Erklärung im Buch „Java and Patterns“ von Dr. Yan Hong beziehen.
Bisher wurde die Verwendung von this, static, super und final erklärt. Wenn Sie den Unterschied und die Verwendung dieser vier Schlüsselwörter grob erkennen können, bedeutet dies, dass Sie sie im Grunde beherrschen. Nichts auf der Welt ist jedoch perfekt. Diese vier Schlüsselwörter sind für Programmierer sehr praktisch, aber das bedeutet nicht, dass Sie sie überall verwenden sollten. Es wird kontraproduktiv sein, also denken Sie bitte darüber nach vorsichtig, wenn Sie es verwenden.
Das Obige ist die ausführliche Anwendung der Java-Sprache in Java. Weitere verwandte Artikel finden Sie auf der chinesischen PHP-Website (www.php.cn)!