Avatar ·

Wird der finally-Block immer ausgeführt? Fallstricke von JVM und System.exit()

Hallo zusammen! Ich bin neu in Java und versuche, die Exception-Behandlung zu verstehen. Der `finally`-Block verwirrt mich. In Lehrbüchern steht, dass er immer ausgeführt wird, unabhängig davon, ob eine Exception aufgetreten ist oder nicht. Aber ich habe einige Beispiele gefunden, bei denen das anscheinend nicht der Fall ist. Zum Beispiel dieser Code: ```java public class FinallyTest { public static void main(String[] args) { try { System.out.println("Im try"); System.exit(0); } catch (Exception e) { System.out.println("Im catch"); } finally { System.out.println("Im finally"); } } } ``` Ich habe erwartet, "Im finally" zu sehen, aber das Programm wurde einfach ohne diese Ausgabe beendet. Warum? `System.exit(0)` ist doch keine Exception, sondern eine normale Beendigung. Und noch ein Beispiel. Wenn im `try`-Block ein `return` steht, wird `finally` trotzdem ausgeführt? Ich habe gehört, dass das so ist, möchte es aber bestätigt haben. Und was passiert, wenn in `finally` ebenfalls eine Exception geworfen wird? Überschreibt sie die Exception aus dem `try`?