Heim  >  Artikel  >  Java  >  Warum überschreibt eine Return-Anweisung in einem Finally-Block den Rückgabewert des Try-Blocks?

Warum überschreibt eine Return-Anweisung in einem Finally-Block den Rückgabewert des Try-Blocks?

Linda Hamilton
Linda HamiltonOriginal
2024-11-11 02:34:02961Durchsuche

Why Does a Return Statement in a Finally Block Override the Try Block's Return Value?

Grund für den unveränderten Rückgabewert

In einer try-finally-Anweisung endet die Ausführung des try-Blocks mit der Ausführung der return-Anweisung. Zu diesem Zeitpunkt ist der Wert der Variablen s, der von der Methode zurückgegeben wird, der Wert von s zum Zeitpunkt der Ausführung der Return-Anweisung.

Auch wenn die final-Klausel den Wert von s später ändert, ändert sie dies Ändern Sie den Rückgabewert der Methode nicht, nachdem die Return-Anweisung bereits ausgeführt wurde.

Unveränderlich vs. veränderlich Objekte

Es ist wichtig zu beachten, dass dieses Verhalten gilt, wenn der Wert von s selbst im „finally“-Block direkt geändert wird. Wenn s jedoch auf ein veränderliches Objekt verweist (was String nicht ist), würde sich die Änderung des Objektinhalts innerhalb des „finally“-Blocks im zurückgegebenen Wert widerspiegeln.

Gesetzliche Spezifikation

Die Java Language Specification (JLS) bietet in Abschnitt 14.20.2 detaillierte Richtlinien für diese Vorgänge. In diesem Abschnitt heißt es, dass eine Return-Anweisung innerhalb eines Try-Blocks eine abrupte Beendigung darstellt. Folglich erklärt Abschnitt 14.17, dass eine Return-Anweisung die Blockausführung abrupt beendet.

Ausnahmebehandlung und Return-Anweisungen

Wenn sowohl der Try-Block als auch der Final-Block aufgrund von Return abrupt beendet werden Anweisungen gelten die Regeln aus §14.20.2:

  • Wenn der Try-Block aufgrund von a abrupt beendet wird Gibt es einen anderen Grund als eine ausgelöste Ausnahme, wird der „finally“-Block ausgeführt. Die try-Anweisung wird dann aus demselben Grund abrupt beendet.
  • Wenn der „finally“-Block aus Grund S abrupt beendet wird, wird die try-Anweisung aus Grund S abrupt beendet und der ursprüngliche Grund verworfen.

Die Konsequenz dieser Regeln besteht darin, dass die return-Anweisung innerhalb des „finally“-Blocks den Rückgabewert der gesamten „try-finally“-Anweisung bestimmt und dabei den Rückgabewert des try-Blocks überschreibt. Ein ähnliches Phänomen tritt bei Try-Catch-Finally-Anweisungen auf, bei denen eine Ausnahme im Try-Block ausgelöst und von einem Catch-Block behandelt wird und sowohl der Catch- als auch der Final-Block Return-Anweisungen enthalten.

Das obige ist der detaillierte Inhalt vonWarum überschreibt eine Return-Anweisung in einem Finally-Block den Rückgabewert des Try-Blocks?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn