Page 5
La hiérarchie des exceptions
Toutes les exceptions dérivent de la classe Throwable.
La classe Error représente une erreur grave intervenue
dans la machine virtuelle Java ou dans un sous-système
Java. L'application Java s'arrête instantanément dès
l'apparition d'une exception de la classe Error.
La classe Exception représente des erreurs moins
graves. Les exceptions héritant de la classe
RuntimeException n'ont pas besoin d'être détectées
impérativement par des blocs try/catch.
Les exceptions de type Error et RuntimeException sont dites unchecked exceptions car les
méthodes n'ont pas d'obligation à les traiter ou à déclarer leur propagation explicitement.
Il n'est pas recommandé de créer ses propres exceptions en dérivant d'une exception de
type RuntimeException. Même si cela peut sembler plus facile puisqu'il n'est pas
obligatoire de déclarer leur propagation, cela peut engendrer certaines difficultés comme:
oublier de traiter cette exception
ne pas savoir que cette exception peut être levée par une méthode.
Cependant, l'utilisation d'exceptions de type unchecked se répend de plus en plus depuis
la diffusion de la plate-forme .Net qui ne propose que ce type d'exceptions.
Créer vos propres exceptions
Il est préférable d'utiliser les exceptions fournies par Java lorsqu'une de ces exceptions
répond au besoin plutôt que de définir sa propre exception. Vous pouvez créer une classe
qui hérite de la classe exception qui sera créé et lancer par vos objets pour être attrapée et
plus précise pour vos propres exceptions.
Pour créer la nouvelle exception il faut :
Fournir deux constructeurs
Un constructeur qui accepte une String pour décrire la raison de l’exception
Exemple
public class InsufficientFundsException extends Exception {
public InsufficientFundsException() {}
public InsufficientFundsException(String message) {
super(message);
}
}
Et elle sera lancée par un objet qui gère les comptes en banque
Exemple
if(amount > balance){
throw new InsufficientFundsException(
"withdrawal of " + amount + " exceeds balance of " + balance);
}