Heim  >  Artikel  >  Java  >  Überschreibt der Final-Block eine zurückgegebene Variable in Java?

Überschreibt der Final-Block eine zurückgegebene Variable in Java?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-12 09:15:02301Durchsuche

Does the Finally Block Override a Returned Variable in Java?

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!

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