Avatar ·

Le bloc finally s'exécute-t-il toujours ? Pièges de la JVM et de System.exit()

Bonjour à tous ! Je suis débutant en Java et j'essaie de comprendre la gestion des exceptions. Je suis confus au sujet du bloc `finally`. Dans les manuels, on dit qu'il s'exécute toujours, qu'il y ait une exception ou non. Mais j'ai trouvé quelques exemples où ce n'est apparemment pas le cas. Par exemple, ce code : ```java public class FinallyTest { public static void main(String[] args) { try { System.out.println("Dans try"); System.exit(0); } catch (Exception e) { System.out.println("Dans catch"); } finally { System.out.println("Dans finally"); } } } ``` Je m'attendais à voir "Dans finally", mais le programme s'est terminé sans cet affichage. Pourquoi ? `System.exit(0)` n'est pas une exception, c'est une terminaison normale. Et un autre exemple. Si dans le bloc `try` il y a un `return`, le `finally` s'exécutera-t-il quand même ? J'ai entendu dire que oui, mais je veux en être sûr. Et que se passe-t-il si dans le `finally` on lance aussi une exception ? Écrasera-t-elle l'exception du `try` ?