Heim >Java >javaLernprogramm >Warum hat das Ändern einer Variablen in einem „finally'-Block keinen Einfluss auf den Rückgabewert in Java?

Warum hat das Ändern einer Variablen in einem „finally'-Block keinen Einfluss auf den Rückgabewert in Java?

Susan Sarandon
Susan SarandonOriginal
2024-12-02 06:09:11505Durchsuche

Why Does Modifying a Variable in a `finally` Block Not Affect the Return Value in Java?

Warum wirkt sich das Ändern einer Variablen in einem „finally“-Block nicht auf den Rückgabewert aus?

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?

Erklärung

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!

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