Lever, attraper et propager une exception
Le mécanisme d'exception de Java : throw, try, catch, finally, remontée dans la pile d'appels jusqu'au premier catch compatible, ordre des catch et try-with-resources.
- 25 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.
- Notions
- Questions
- Ranger et relier
- Mises en situation
- Comprendre
Quelques cartes du deck
Lever une exception (throw) : de quoi s'agit-il ?
Voir la réponse
Instruction qui lance un objet exception, le plus souvent créé sur place avec new, et interrompt aussitôt le code en cours pour signaler qu'un problème est survenu.
throw new IllegalArgumentException("amount: -3");: les instructions qui suivent ne s'exécutent pas, et Java cherche uncatchcompatible.Qu'affiche ce programme ?
```java
static void convert() {
System.out.println("convert");
Integer.parseInt("x");
System.out.println("converted");
}
static void read() {
try {
convert();
System.out.println("read ok");
} catch (NumberFormatException e) {
System.out.println("caught");
} finally {
System.out.println("finally");
}
System.out.println("after");
}
public static void main(String[] args) {
read();
System.out.println("end");
}`convert,caught,finally,after,endconvert,converted,read ok,finally,after,endconvert,caught,after,endconvert,caught,finally,end
Voir la réponse
convert,caught,finally,after,endparseIntlèveNumberFormatException:convertedetread oksont sautés. Lecatchtraite l'exception, lefinallys'exécute, et comme l'exception est attrapée,readse termine normalement :afteretendsont affichés.Quand plusieurs blocs catch se suivent, c'est le … dont le type est compatible qui s'exécute ; les types les plus … se placent donc avant les plus généraux.
Voir la réponse
Quand plusieurs blocs catch se suivent, c'est le premier dont le type est compatible qui s'exécute ; les types les plus précis se placent donc avant les plus généraux.
Java essaie les catch de haut en bas et s'arrête au premier compatible : un catch général placé en tête intercepterait tout ce que les suivants devaient recevoir.
Attraper une exception (catch) : de quoi s'agit-il ?
Voir la réponse
Bloc qui reçoit une exception d'un type compatible, levée dans le bloc try associé, et exécute le code de traitement.
Un
catchreçoit son type et ses sous-classes :catch (RuntimeException e)attrape uneIllegalStateException, mais pas uneIOException.Une méthode entoure un traitement de
try { … } catch (Exception e) { }. En production, les données enregistrées sont fausses et aucun message n'apparaît nulle part. Quelle est la cause ?catch (Exception e)ne reçoit pas les exceptions levées par la méthode elle-même- Le bloc
tryest ignoré à l'exécution quand lecatchne contient aucune instruction - Le
catchvide avale l'exception : l'erreur est attrapée mais jamais traitée ni journalisée - Les exceptions attrapées sont toujours transmises au
finally, qui doit les afficher
Voir la réponse
Le
catchvide avale l'exception : l'erreur est attrapée mais jamais traitée ni journaliséeUn
catchvide fait disparaître le problème sans le résoudre : le programme continue avec un état incohérent. Il faut au minimum journaliser l'exception, ou la laisser remonter à qui sait la traiter.