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` ?