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.
