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:
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!