| ... | @@ -12,12 +12,28 @@ Le mécanisme est illustré ci-dessous : |
... | @@ -12,12 +12,28 @@ Le mécanisme est illustré ci-dessous : |
|
|
<div align="center">
|
|
<div align="center">
|
|
|
<img src="uploads/99a196d386c3b5afd0b4effb047323c9/Exception.png" width=100%>
|
|
<img src="uploads/99a196d386c3b5afd0b4effb047323c9/Exception.png" width=100%>
|
|
|
</div>
|
|
</div>
|
|
|
|
<br/>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- Dans le code d'une des méthodes de l'objet `a` on trouve un appel à une méthode `m1` de l'objet `b`.
|
|
- 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 `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 `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, ...)
|
|
- 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 `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 `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.
|
|
- 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... |
|
- 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 |
|
|
|
|
|
# Catégories d'exceptions
|
|
|
|
|
|
|
|
:book: Les exceptions sont des classes qui ont toutes comme super-type commun `Throwable`, qui définit une exception au sens très large :
|
|
|
|
|
|
|
|
- `Error` étend `Throwable` et dénote une **erreur non récupérable** (qu'on ne peut pas corriger)
|
|
|
|
- `Exception` étend `Throwable` et dénote une **erreur récupérable** (qu'on peut corriger)
|
|
|
|
- `RuntimeException` étend `Exception` et caractérise une erreur liée à l'environnement d'exécution (utilisation d'une référence nulle, débordement de tableau, ...)
|
|
|
|
|
|
|
|
|
|
|
|
:book: Le type de l'exception, le nom qui est donné à la classe, permet de caractériser l'erreur (`NullPointerException` pour l'utilisation d'une référence nulle, ou `ArrayIndexOutOfBoundsException` pour un débordement de tableau par exemple).
|
|
|
|
|
|
|
|
:book: Le conceptuer d'une classe peut définir de nouveaux types d'exception pour caractériser les erreurs associées à la logique de l'application (on essaie d'empiler dans une pile pleine par exemple) |
|
|
|
\ No newline at end of file |