Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →