|
|
La suite présente le mécanisme de gestion d'erreur standard en Java, les exceptions.
|
|
La suite présente le mécanisme de gestion d'erreur standard en Java, les exceptions.
|
|
|
|
|
|
|
|
|
# Table des matières
|
|
|
|
|
|
|
|
<!-- TOC start (generated with https://github.com/derlin/bitdowntoc) -->
|
|
|
|
|
|
|
|
- [En bref](#en-bref)
|
|
|
|
- [Catégories d'exceptions](#catégories-dexceptions)
|
|
|
|
- [Définition d'exceptions](#définition-dexceptions)
|
|
|
|
- [Signalement des exceptions](#signalement-des-exceptions)
|
|
|
|
- [Soulevement des exceptions](#soulevement-des-exceptions)
|
|
|
|
- [Propagation d’exceptions](#propagation-dexceptions)
|
|
|
|
- [Capture et traitement d’exceptions](#capture-et-traitement-dexceptions)
|
|
|
|
- [Classe `Exception`](#classe-exception)
|
|
|
|
|
|
|
|
<!-- TOC end -->
|
|
|
|
|
|
|
|
|
|
|
|
<!-- TOC --><a name="en-bref"></a>
|
|
|
# En bref
|
|
# En bref
|
|
|
|
|
|
|
|
:book: Une **exception** est un **objet** :
|
|
:book: Une **exception** est un **objet** :
|
| ... | @@ -25,6 +42,7 @@ Le mécanisme est illustré ci-dessous : |
... | @@ -25,6 +42,7 @@ Le mécanisme est illustré ci-dessous : |
|
|
- 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...
|
|
|
|
|
|
|
|
|
<!-- TOC --><a name="catégories-dexceptions"></a>
|
|
|
# Catégories d'exceptions
|
|
# 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 :
|
|
:book: Les exceptions sont des classes qui ont toutes comme super-type commun `Throwable`, qui définit une exception au sens très large :
|
| ... | @@ -38,6 +56,7 @@ Le mécanisme est illustré ci-dessous : |
... | @@ -38,6 +56,7 @@ Le mécanisme est illustré ci-dessous : |
|
|
|
|
|
|
|
:book: Le concepteur 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)
|
|
:book: Le concepteur 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)
|
|
|
|
|
|
|
|
|
<!-- TOC --><a name="définition-dexceptions"></a>
|
|
|
# Définition d'exceptions
|
|
# Définition d'exceptions
|
|
|
|
|
|
|
|
:rewind: La première version de la classe [`StackOfNonNegativeIntegers`](https://gitlab.iut-valence.fr/INFO-BUT/S2/info-but-r2-01/stacks-basics-complete-version) gérait les erreurs en détournant des codes de retour (entiers) des opérations `push`, `pop` et `view` :
|
|
:rewind: La première version de la classe [`StackOfNonNegativeIntegers`](https://gitlab.iut-valence.fr/INFO-BUT/S2/info-but-r2-01/stacks-basics-complete-version) gérait les erreurs en détournant des codes de retour (entiers) des opérations `push`, `pop` et `view` :
|
| ... | @@ -87,6 +106,7 @@ public class EmptyStackException extends Exception {} |
... | @@ -87,6 +106,7 @@ public class EmptyStackException extends Exception {} |
|
|
public class NegativeElementException extends Exception {}
|
|
public class NegativeElementException extends Exception {}
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
|
<!-- TOC --><a name="signalement-des-exceptions"></a>
|
|
|
# Signalement des exceptions
|
|
# Signalement des exceptions
|
|
|
|
|
|
|
|
:book: **Toute méthode soulevant une exception doit obligatoirement le signaler** dans sa signature via le mot-clé `throws`.
|
|
:book: **Toute méthode soulevant une exception doit obligatoirement le signaler** dans sa signature via le mot-clé `throws`.
|
| ... | @@ -125,6 +145,7 @@ public int view() throws StackIsEmptyException { ... } |
... | @@ -125,6 +145,7 @@ public int view() throws StackIsEmptyException { ... } |
|
|
|
|
|
|
|
:book: La balise `@throws` permet de documenter dans quel cas l'exception est soulevée (une balise par exception)
|
|
:book: La balise `@throws` permet de documenter dans quel cas l'exception est soulevée (une balise par exception)
|
|
|
|
|
|
|
|
|
<!-- TOC --><a name="soulevement-des-exceptions"></a>
|
|
|
# Soulevement des exceptions
|
|
# Soulevement des exceptions
|
|
|
|
|
|
|
|
:book: Pour avertir d'une anomalie lors de sa détection, une méthode :
|
|
:book: Pour avertir d'une anomalie lors de sa détection, une méthode :
|
| ... | @@ -177,6 +198,7 @@ public StackOfNonNegativeIntegers(int capacity) throws UnexpectedCapacityExcepti |
... | @@ -177,6 +198,7 @@ public StackOfNonNegativeIntegers(int capacity) throws UnexpectedCapacityExcepti |
|
|
}
|
|
}
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
|
<!-- TOC --><a name="propagation-dexceptions"></a>
|
|
|
# Propagation d’exceptions
|
|
# Propagation d’exceptions
|
|
|
|
|
|
|
|
:book: Dans une méthode où des appels de méthode peuvent se traduire par des remontées d’exceptions et **où aucun traitement d’erreur n’est prévu**, il est obligatoire de **re-signaler les exceptions**
|
|
:book: Dans une méthode où des appels de méthode peuvent se traduire par des remontées d’exceptions et **où aucun traitement d’erreur n’est prévu**, il est obligatoire de **re-signaler les exceptions**
|
| ... | @@ -214,6 +236,7 @@ public void push(int element) throws StackIsFullException, NegativeElementExcept |
... | @@ -214,6 +236,7 @@ public void push(int element) throws StackIsFullException, NegativeElementExcept |
|
|
}
|
|
}
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
|
<!-- TOC --><a name="capture-et-traitement-dexceptions"></a>
|
|
|
# Capture et traitement d’exceptions
|
|
# Capture et traitement d’exceptions
|
|
|
|
|
|
|
|
:book: Dans une méthode où des appels de méthode peuvent se traduire par des remontées d’exceptions et **où un traitement d’erreur est prévu** (on sait gérer l'erreur), il est obligatoire de **capturer les exceptions**, via la clause `try` / `catch` / `finally` :
|
|
:book: Dans une méthode où des appels de méthode peuvent se traduire par des remontées d’exceptions et **où un traitement d’erreur est prévu** (on sait gérer l'erreur), il est obligatoire de **capturer les exceptions**, via la clause `try` / `catch` / `finally` :
|
| ... | @@ -247,6 +270,7 @@ catch (FullStackException e1) { ... } |
... | @@ -247,6 +270,7 @@ catch (FullStackException e1) { ... } |
|
|
catch (NegativeElementException e2) { ... }
|
|
catch (NegativeElementException e2) { ... }
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
|
<!-- TOC --><a name="classe-exception"></a>
|
|
|
# Classe `Exception`
|
|
# Classe `Exception`
|
|
|
|
|
|
|
|
:book: La classe `Exception` possède des constructeurs et des méthodes qui peuvent s'avérer utiles :
|
|
:book: La classe `Exception` possède des constructeurs et des méthodes qui peuvent s'avérer utiles :
|
| ... | |
... | |
| ... | | ... | |