Vorwort:
Wie erwartet stellte der Interviewer im letzten Interview noch einmal diese Frage: Könnten Sie mir bitte die spezifische Bedeutung des letzten Schlüsselworts mitteilen und seine Rolle im Detail sowie den Unterschied zwischen ihm und Static erläutern? Damit jeder Interviewpartner auf diese Frage aufmerksam wird, sind die Antworten speziell für Sie als Referenz zusammengestellt.
1. Die Bedeutung des Schlüsselworts final
Die Oberflächenbedeutung von final ist unveränderlich und konstant; ähnlich wie das Schlüsselwort const in der C-Sprache bezieht es sich auf eine Größe, die nicht geändert werden kann, was sich von der statischen Skalarstatik unterscheidet Ja, statische Variablen beziehen sich nur auf einen Speicherplatz und der Wert kann geändert werden. Der Grund für die Verwendung von „final“ liegt in der Perspektive des Software-Designs, denn wenn andere das Schlüsselwort „final“ sehen, wissen sie, was es bedeutet, und erzielen den Effekt, es zu verstehen. Dies liegt jedoch genau an der Existenz dieser „Semantik“. Sie müssen bei der Programmierung vorsichtig sein, um Missbrauch zu vermeiden.
In Java sind endgültige Änderungen Konstanten und Variablennamen müssen großgeschrieben werden.
Math-Klasse: public static final double E = 2.7182818284590452354; public static final double PI = 3.14159265358979323846;
...Es gibt viele Variablen in der Java-Quelle code Sie werden alle mit final
2 geändert. Die Rolle von final
final hat je nach Änderungsposition unterschiedliche Rollen:
(1) Die durch final geänderten Variablen müssen initialisiert und zugewiesen werden Es handelt sich um einen Anfangswert, der später nicht mehr neu zugewiesen werden kann.
Hinweis: Lokale Variablen fallen nicht in den Rahmen unserer Diskussion, da lokale Variablen selbst einen Gültigkeitsbereich haben und nicht durch Wörter wie privat und öffentlich geändert werden.
(2) Modifizierte Methode. Die durch final geänderte Methode bedeutet, dass sie nicht neu geschrieben werden kann.
(3) Geänderte Klassen, durch final geänderte Klassen können nicht vererbt werden.
Hinweis: Bei einer endgültig modifizierten Klasse werden alle Mitgliedsmethoden in der Klasse implizit als endgültige Methoden bezeichnet.
2.1. Durch final geänderte Variablen müssen explizit initialisiert werden: 1) Initialisierung beim Definieren, 2) Festlegen des Werts im Konstruktor, 3) in einem nicht statischen Block . Die letzte Instanzvariable legt den Wert fest.
public class Test01{ final int x1= 10000; final int x2; final int x3; { x2 = 20000; } Public exe3(){ this.x3 = 3000; } }Wenn die durch final geänderte Variable ein Objekttyp ist, bedeutet „unveränderbar“, dass die Variable nicht auf andere Objekte verweisen kann, aber der Wert des Objekts geändert werden kann, wie zum Beispiel:
final Operate operate = new Operate() ;// operate有一个普通变量i初始化为10operate.i = 11; operate.i = 12; System.out.println(operate.i); //输出12上述是自定义类,即便是数组,List等集合类型,所保存的值也是可以更改的。3 Der Unterschied zwischen final und static
static wirkt sich auf Mitgliedsvariablen aus, um anzuzeigen, dass nur eine Kopie gespeichert wird, während final verwendet wird, um sicherzustellen, dass Variablen unveränderlich sind. Schauen Sie sich online ein Beispiel an:
public class Test { public static void main(String[] args) { MyClass myClass1 = new MyClass(); MyClass myClass2 = new MyClass(); System.out.println(myClass1.i); System.out.println(myClass1.j); System.out.println(myClass2.i); System.out.println(myClass2.j); } } class MyClass { public final double i = Math.random(); public static double j = Math.random(); } //运行结果,两次打印,j的值都是一样的,j是static类型的属于类,因此两次值相同。i不是static的因此属于对象,但是i的值是不可变的。(Lernvideo-Sharing:
Java-Video-Tutorial
)4. Andere finalbezogene Kenntnisse
(1) Verwenden Sie das Schlüsselwort final. Wenn der Compiler den Wert einer Variablen während der Kompilierungsphase bestimmen kann, verwendet der Compiler die Variable als Konstante zur Kompilierungszeit. Wenn dies zur Laufzeit ermittelt werden muss, optimiert der Compiler den entsprechenden Code nicht.
public class Test { public static void main(String[] args) { String a = "hello2"; final String b = "hello"; String d = "hello"; String c = b + 2; String e = d + 2; System.out.println((a == c)); System.out.println((a == e)); } } //final类型,在编译阶段能够确定值。 //非final类型在编译阶段确定不了 输出: true false public class Test { public static void main(String[] args) { String a = "hello2"; final String b = getHello(); String c = b + 2; System.out.println((a == c)); } public static String getHello() { return "hello"; } } //即便是final类型,编译阶段也确定不了值。输出false(2) Achten Sie darauf, „final“ nicht mit „finally“, „finalize()“ usw. zu verwechseln. (3) Durch die Deklaration von Klassen, Methoden und Variablen als endgültig kann die Leistung verbessert werden, sodass die JVM die Möglichkeit hat, Schätzungen vorzunehmen und diese dann zu optimieren. (4) Die Variablen in der Schnittstelle sind alle öffentliche statische Endvariablen. Verwandte Empfehlungen:
Fragen und Antworten zu Java-Interviews
Originallink: http://www.cnblogs.com/liun1994/p/6691094.html
Originalautor: Suifenglangzi90
Das obige ist der detaillierte Inhalt vonInterviewer: Bitte erläutern Sie ausführlich die Rolle des endgültigen Schlüsselworts und seinen Unterschied zum statischen Schlüsselwort. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!