|
|
|
La suite présente le mécanisme de gestion d'erreur standard en Java, les exceptions.
|
|
|
|
|
|
|
|
# En bref
|
|
|
|
|
|
|
|
:book: Une **exception** est un o**b**jet :
|
|
|
|
- **Instancié explicitement au moment où l’erreur survient**
|
|
|
|
- Dont le **type** manifeste la **nature de l’erreur**
|
|
|
|
- Qui **remonte la pile d’appel** jusqu’à ce qu’il soit **explicitement capturé** afin de **traiter l’erreur**
|
|
|
|
|
|
|
|
Le mécanisme est illustré ci-dessous :
|
|
|
|
|
|
|
|
<div align="center">
|
|
|
|
<img src="uploads/99a196d386c3b5afd0b4effb047323c9/Exception.png" width=100%>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
- Dans le code d'une des méthodes de l'objet `a` on trouve un appel à une méthode `m1` de l'objet `b`.
|
|
|
|
- Une des instructions de `m1` appelle la méthode `m2` sur l'objet `c`.
|
|
|
|
- Une des instructions de `m2` appelle la méthode `m3` sur l'objet `d`.
|
|
|
|
- une des instructions de `m3` effectue des tests et **identifie un cas d'erreur** (paramètre invalide, impossibilité de produire le résultat, ...)
|
|
|
|
- La méthode `m3` **soulève une exception**. Son exécution **s'arrête immédiatement** et l'objet exception **remonte** à l'appelant (`m2`).
|
|
|
|
- La méthode `m2` **n'a pas prévu** de traitement de cette erreur. Son exécution s'arrête immédiatement également et l'objet exception remonte (**se propage**) à l'appelant (`m1`).
|
|
|
|
- La méthode `m1` **a prévu** un traitement de cette erreur. L'objet exception est **détruit**, l'exécution de `m1` se poursuit normalement jusqu'à son terme.
|
|
|
|
- l'objet `a` reprend la main, sans pouvoir savoir qu'une erreur a été détectée et traitée sur le chemin... |
|
|
|
\ No newline at end of file |