Exceptions vérifiées ou non vérifiées

La hiérarchie Throwable de Java (Error, Exception, RuntimeException), la règle attraper ou déclarer, la clause throws et le choix du type quand on écrit sa propre exception.

  • 26 cartes
  • 5 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation
  5. Comprendre

Quelques cartes du deck

  • Exception vérifiée : de quoi s'agit-il ?

    Voir la réponse

    Exception que le compilateur oblige à traiter : tout appel qui peut la lever doit être entouré d'un catch compatible ou la déclarer dans la signature.

    C'est toute sous-classe de Exception qui n'est pas une RuntimeException : IOException, SQLException, InterruptedException. Sans traitement, javac refuse le code.

  • javac refuse ce code avec unreported exception FileNotFoundException; must be caught or declared to be thrown. Quelle correction est valide, sans modifier la signature de open ?

    ```java
    static void open() {
    new FileReader("a.txt");
    }
    `

    • Entourer l'appel d'un try avec catch (FileNotFoundException e)
    • Écrire throw devant new FileReader("a.txt")
    • Entourer l'appel d'un try avec catch (RuntimeException e)
    • Déclarer throws IOException sur main, qui appelle open
    Voir la réponse

    Entourer l'appel d'un try avec catch (FileNotFoundException e)

    Le catch doit viser FileNotFoundException ou l'un de ses parents vérifiés (IOException, Exception). RuntimeException n'en fait pas partie, et throw lève une exception au lieu d'en traiter une.

  • RuntimeException et ses sous-classes sont … ; les autres sous-classes de Exception, comme IOException, sont ….

    Voir la réponse

    RuntimeException et ses sous-classes sont non vérifiées ; les autres sous-classes de Exception, comme IOException, sont vérifiées.

    La frontière passe par RuntimeException : c'est elle, et non Exception, qui marque les exceptions que le compilateur ne contrôle pas.

  • Exception non vérifiée : de quoi s'agit-il ?

    Voir la réponse

    Exception dont le traitement n'est pas imposé par le compilateur : RuntimeException et ses sous-classes, ainsi que Error et les siennes.

    NullPointerException, ArithmeticException ou IllegalArgumentException peuvent surgir presque partout : les traiter à chaque appel noierait le code. On corrige plutôt le bogue.

  • Une méthode charge un fichier de configuration. S'il manque, l'appelant peut proposer un autre chemin. Quel type d'exception écrire pour ce cas ?

    • Une classe qui étend Error, puisque le fichier se trouve en dehors du programme lui-même
    • Une exception non vérifiée, car en pratique aucun appelant n'écrira de bloc try pour elle
    • Une exception vérifiée, qui étend Exception : l'appelant peut réagir et le compilateur l'y oblige
    • Une RuntimeException, parce que les fichiers ne se lisent qu'au moment de l'exécution du programme
    Voir la réponse

    Une exception vérifiée, qui étend Exception : l'appelant peut réagir et le compilateur l'y oblige

    On choisit vérifiée quand l'appelant peut raisonnablement récupérer. Pour un bogue de l'appelant (un argument négatif, une référence nulle), on lève plutôt une exception non vérifiée comme IllegalArgumentException. Error est réservée à la machine virtuelle.