In Java wird allgemein davon ausgegangen, dass der „finally“-Block keinen Einfluss auf den Rückgabewert von haben sollte die Methode. Es kann jedoch verwirrend sein, warum dies der Fall ist, insbesondere wenn der Rückgabewert innerhalb des „finally“-Blocks geändert wird.
Betrachten Sie das folgende Beispiel:
public class Test { private String s; public String foo() { try { s = "dev"; return s; } finally { s = "override variable s"; System.out.println("Entry in finally Block"); } } public static void main(String[] xyz) { Test obj = new Test(); System.out.println(obj.foo()); } }
Die Ausgabe dieses Codes ist :
Entry in finally Block dev
Warum wird s im „finally“-Block nicht überschrieben, das Steuerelement wird jedoch gedruckt? Ausgabe?
Der Try-Block wird mit der Ausführung der Return-Anweisung abgeschlossen. Der Wert von s zum Zeitpunkt der Ausführung der Return-Anweisung ist der von der Methode zurückgegebene Wert. Die Tatsache, dass die final-Klausel später den Wert von s ändert (nachdem die return-Anweisung abgeschlossen ist), ändert (zu diesem Zeitpunkt) nicht den Rückgabewert.
Im obigen Beispiel wird die return-Anweisung im try-Block festgelegt der Rückgabewert auf „dev“. Der final-Block setzt s dann auf „Variable s überschreiben“, diese Änderung erfolgt jedoch, nachdem der Rückgabewert bereits festgelegt wurde. Daher ist der Rückgabewert immer noch „dev“.
Es ist wichtig zu beachten, dass dieses Verhalten nur für Änderungen im Wert primitiver Variablen oder unveränderlicher Objekte gilt. Wenn s ein Verweis auf ein veränderliches Objekt wäre und der Inhalt des Objekts im „finally“-Block geändert würde, wären diese Änderungen im zurückgegebenen Wert zu sehen.
Das obige ist der detaillierte Inhalt vonWarum hat das Ändern einer Variablen in einem „finally'-Block keinen Einfluss auf den Rückgabewert in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!