Wyjaśnienie „spróbuj złapać wreszcie” [duplikat]

To pytanie ma już odpowiedź tutaj:

Wiele zwrotów: Który ustawia ostateczną wartość zwrotu? 7 odpowiedzi

Czytając wszystkie pytania zadane na tym forum dotyczące powyższego tematu (patrz tytuł), doskonale rozumiem, żefinally jest zawsze wywoływany. (Z wyjątkiemSystem.exit i nieskończone pętle). Chciałbym jednak wiedzieć, czyreturn jest wywoływane w bloku catch, a następnie kolejnereturn jest wywoływane z ostatniego bloku.

Na przykład

public static void main(String[]args) {
    int a = new TestClass().absorbeTheValue();
}

int absorbeTheValue() {
    try {
        int a = 10/0;
        if (a > 0) return 4;
    } catch(Exception e) {
        return 45;
    } finally {
        return 34;
    }
}    

Więc tutaj wyjście (gdy wywoływana jest metoda) będzie w każdym razie 34. Oznacza to, że w końcu zawsze ucieka. Myślę jednak, że pozostałe „zwroty” wcale nie są uruchamiane. W wielu postach znalazłem fakt, że w końcu napisałem treść nad tym, co już napisano w klauzuli catch. Rozumiem, że jak tylko wartość zwrotna w klauzuli catch ma być oceniana, przepływ sterowania przechodzi do klauzuli final, która z kolei ma kolejny zwrot, tym razem zwrot zostanie oceniony bez przekazywania kontroli z powrotem do klauzuli catch . W ten sposób jedynyreturn wywołane w czasie wykonywania będzie w końcu powrotu. Zgadzasz się z tym

A return wfinally nie przekazuje kontroli do programu, ale zwraca wartość i kończy metodę. Czy możemy tak powiedzieć?

questionAnswers(2)

yourAnswerToTheQuestion