programmation Java (école d'ingénieur) · Chapitre 11 · Application directe du cours
Deux ressources
Exceptions · niveau 3 (difficile)
Énoncé
La classe Res implémente AutoCloseable ; son constructeur affiche « ouvre » suivi de son nom, et sa méthode close() affiche « ferme » suivi de son nom. Qu'affiche le bloc suivant ? Justifier l'ordre de chaque ligne.
try (Res a = new Res("A"); Res b = new Res("B")) {
System.out.println("corps");
throw new RuntimeException("erreur dans le corps");
} catch (RuntimeException e) {
System.out.println("catch : " + e.getMessage());
} finally {
System.out.println("finally");
}Corrigé
ouvre A
ouvre B
corps
ferme B
ferme A
catch : erreur dans le corps
finally
Les ressources s'ouvrent dans l'ordre de leur déclaration (A puis B). Le corps lève une exception : avant toute autre chose, les ressources sont fermées, dans l'ordre inverse de leur ouverture (B puis A, comme une pile : la dernière ouverte peut dépendre de la première, il faut la fermer d'abord). Ensuite seulement viennent le catch, puis le finally.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.