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.