Auswirkungen des Final-Blocks auf zurückgegebene Variablen: Die Ausnahme verstehen
In Java stellt der Final-Block die Codeausführung unabhängig vom Try-Catch-Block sicher Ergebnisse oder abrupte Beendigungen. Es ist jedoch wichtig zu verstehen, wie diese Blöcke mit zurückgegebenen Variablen interagieren.
Betrachten Sie den folgenden Kurs:
public class Test { private String s; public String foo() { try { s = "dev"; return s; } finally { s = "override variable s"; // This change doesn't affect the returned value System.out.println("Entry in finally Block"); } } public static void main(String[] xyz) { Test obj = new Test(); System.out.println(obj.foo()); // Prints "dev" } }
Dekodierung des unerwarteten Verhaltens
Wenn die foo()-Methode aufgerufen wird, wird der zurückgegebene Wert bestimmt, bevor der finale Block ausgeführt wird. Der try-Block wird mit der return-Anweisung abgeschlossen, die s „dev“ zuweist, was zum zurückgegebenen Wert wird. Die anschließende Änderung von s innerhalb des „final“-Blocks wird nicht im zurückgegebenen Wert widergespiegelt.
Die Regeln verstehen
Gemäß der Java-Sprachspezifikation wird der try-Block mit abgeschlossen Eine Return-Anweisung beendet es abrupt. Der „final“-Block wird nach der abrupten Beendigung ausgeführt, und wenn er normal abgeschlossen wird, wird auch die try-Anweisung abrupt beendet. Daher überschreibt die return-Anweisung im final-Block den im try-Block ermittelten Rückgabewert.
Veränderliche Objekte im Vergleich zu unveränderlichen Objekten
Beachten Sie, dass dieses Verhalten für die gilt tatsächlicher Wert von s, nicht das Objekt, auf das es verweist. Wenn s ein Verweis auf ein veränderliches Objekt (z. B. ein Array oder eine benutzerdefinierte Klasse) wäre und dessen Inhalt im „finally“-Block geändert würde, würden sich diese Änderungen auf den zurückgegebenen Wert auswirken. Allerdings sind String-Objekte unveränderlich, sodass ihre Werte nicht geändert werden können.
Fazit
Zusammenfassend lässt sich sagen, dass der „finally“-Block die zurückgegebene Variable in einem „try“-Block nicht ändern kann. Der zurückgegebene Wert wird bestimmt, bevor der „finally“-Block ausgeführt wird, und alle nachfolgenden Änderungen am Wert der Variablen innerhalb des „finally“-Blocks haben keinen Einfluss auf das zurückgegebene Ergebnis.
Das obige ist der detaillierte Inhalt vonÜberschreibt der Final-Block eine zurückgegebene Variable in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!