« Programmation Java/Exceptions » : différence entre les versions

Contenu supprimé Contenu ajouté
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
Ligne 75 :
Toute autre exception non capturée (telle <code>IOException</code>) est transmise à la méthode appelante, et doit '''toujours''' être déclarée pour la méthode, en utilisant le mot clé <code>throws</code>, sauf les exceptions dérivant de la classe <code>RuntimeException</code>.
S'il n'y avait pas cette exception à la règle, il faudrait déclarer <code>throws ArrayIndexOutOfBoundsException</code> chaque fois qu'une méthode utilise un tableau, ou <code>throws ArithmeticException</code> chaque fois qu'une expression est utilisée, par exemple.
 
=== Ne jamais ignorer une exception ===
 
Il est tentant de vouloir ignorer une ou des exceptions en ne faisant aucun traitement et en poursuivant l'exécution, comme dans cet exemple tiré des sources de Java :
 
<syntaxhighlight lang="java">
if (formatName != null) {
try {
Node root = inData.getAsTree(formatName);
outData.mergeTree(formatName, root);
} catch(IIOInvalidTreeException e) {
// ignore
}
}
</syntaxhighlight>
 
Cependant, c'est une très mauvaise pratique, car l'exception indique que les données d'entrée comporte une erreur mais l'utilisateur ou le développeur n'est pas informé. La poursuite de l'exécution aboutira alors à la production d'un résultat mauvais dont l'origine sera très difficile à remonter.
 
Il vaut mieux :
* retirer le bloc catch et permettre de remonter l'exception à un niveau plus haut,
* ou retransmettre l'exception avec un type plus précis indiquant le problème de manière plus détaillée.
Remonter l'exception permet un traitement approprié (correction de code, message d'erreur à l'utilisateur pour qu'il corrige les valeurs d'entrées, essayer une autre solution, ...).
 
== Classes et sous-classes d'exception ==