Wird ein finally-Block in Java immer ausgeführt?

Ja, ein finally-Block wird in Java immer ausgeführt.

Der finally-Block kann in Java in Verbindung mit einem try-Block auftreten. Unabhängig davon, wie der Kontrollfluss in den try-catch-Blöcken ist, wird die Anweisung im finally-Block immer ausgeführt.

Beispiel:

public class FinallyTest {

    static void foo(int n) {
        System.out.printf("foo(%d)\n", n);
        try {
            if (n == 1) {
                return;
            }
            n = 1 / n;
        } catch (Exception e) {
            System.out.println("Im catch-Block.");
        } finally {
            System.out.println("Im finally-Block.");
        }
    }

    public static void main(String[] args) {
       foo(1);
       System.out.println("----");
       foo(0);
    }
}

// Ausgabe:
// --------
//
// foo(1)
// Im finally-Block.
// ----
// foo(0)
// Im catch-Block.
// Im finally-Block.

Wird die Methode foo() mit dem Argument 1 aufgerufen, wird trotz des return in Zeile 7 der finally-Block ausgeführt.

Wird die Methode foo() mit dem Argument 0 aufgerufen, wird in Zeile 9 eine ArithmeticException geworfen. Daraufhin werden die Anweisungen im catch-Block ausgeführt. Im Anschluss daran wird der finally-Block abgearbeitet.