Exceptions
Exceptions
Exceptions
en Java
les exceptions
Prévoir les erreurs d'utilisation
Certains cas d'erreurs peuvent être prévus à l'avance par le
programmeur.
exemples:
erreurs d'entrée-sortie (I/O fichiers)
erreurs de saisi de données par l’utilisateur
Le programmeur peut :
«Laisser planter» le programme à l’endroit où l’erreur est détectée
Manifester le problème à la couche supérieure
Tenter une correction
2
Notion d'exception
En Java, les erreurs se produisent lors d'une exécution sous la
forme d'exceptions.
Une exception :
est un objet, instance d'une classe d'exception
provoque la sortie d'une méthode
correspond à un type d'erreur
contient des informations sur cette erreur
3
Les exceptions
Un objet JAVA Exception est une « bulle » logicielle produite dans
cette situation qui va remonter la pile d’exécution pour trouver une portion de
code apte à la traiter
4
Terminologie
Une exception est un signal qui indique que quelque chose
d'exceptionnel est survenu en cours d'exécution.
Deux solutions alors :
laisser le programme se terminer avec une erreur,
5
Arbre des exceptions
Throwable
String (message d'erreur)
Exception Error
OutOfMemoryError
Les erreurs sont graves et il est
RunTimeException recommandé de ne pas les corriger.
NullPointerException
VosExceptions...
ClassCastException
... exceptions prédéfinies
6
Nature des exceptions
En Java, les exceptions sont des objets ayant 3
caractéristiques:
Un type d’exception (défini par la classe de l’objet exception)
Une chaîne de caractères (option), (hérité de la classe
Throwable).
Une log de la pile d’exécution au moment de la création.
Les exceptions construites par l'utilisateur étendent la classe
Exception
RunTimeException, Error sont des exceptions et des erreurs
prédéfinies et/ou gérées par Java
7
Quelques exceptions prédéfinies en
Java
Division par zéro pour les entiers : ArithmeticException
8
Capture d'une exception
Les sections try et catch servent à capturer une exception
dans une méthode
exemple :
public void libererChambre(………) {
try{ …………….. } Si une erreur
se produit
catch {
ici….
………
………
}
} On tente de récupérer là.
9
try
try
/ catch / finally
{
...
}
catch (<une-exception>)
{
...
}
catch (<une_autre_exception>) Autant de blocs catch que l'on veut.
{ Bloc finally facultatif.
...
}
...
finally
{
...
}
10
Traitement des exceptions (1)
Le bloc try est exécuté jusqu'à ce qu'il se termine avec succès
ou bien qu'une exception soit levée.
Dans ce dernier cas, les clauses catch sont examinées l'une
après l'autre dans le but d'en trouver une qui traite cette
classe d'exceptions (ou une superclasse).
Les clauses catch doivent donc traiter les exceptions de la
plus spécifique à la plus générale.
Si une clause catch convenant à cette exception a été trouvée
et le bloc exécuté, l'exécution du programme ne
s’interrompe pas.
11
Traitement des exceptions (2)
Si elles ne sont pas immédiatement capturées par un bloc catch, les
exceptions se propagent en remontant la pile d'appels des méthodes,
jusqu'à être traitées.
Si une exception n'est jamais capturée, elle se propage jusqu'à la
méthode main(), ce qui pousse l'interpréteur Java à afficher un message
d'erreur et s'arrêter.
L'interpréteur Java affiche un message identifiant :
l'exception,
la méthode qui l'a causée,
la ligne correspondante dans le fichier.
12
Bloc finally
Un bloc finally permet au programmeur de
définir un ensemble d'instructions qui est toujours
exécuté, que l'exception soit levée ou non.
La seule instruction qui peut faire qu'un bloc
finally ne soit pas exécuté est System.exit().
13
Interception vs propagation
Si une méthode peut émettre une exception
(ou appelle une autre méthode qui peut en émettre une)
il faut :
14
Exemple de propagation
15
Exemple d'interception
public int somme(int a, String str) {
try {
int b = Integer.parseInt(str);
a = a + b;
} catch (NumberFormatException e) {
System.out.println(e.getMessage());
}
return a;
}
16
Les objets Exception
La classe Exception hérite de La classe Throwable.
17
Exemple
public class MonException extends Exception
{
public MonException()
{
super();
}
public MonException(String s)
{
super(s);
}
}
18
Levée d'exceptions
Le programmeur peut lever ses propres exceptions à l'aide du mot
réservé throw.
throw prend en paramètre un objet instance de Throwable ou
d'une de ses sous-classes.
Les objets exception sont souvent instanciés dans l'instruction
même qui assure leur lancement.
19
Emission d'une exception
L'exception elle-même est levée par l'instruction throw.
exemple :
public void ouvrirFichier(String name) throws MonException
{if (name==null) throw new MonException();
else
{...}
}
20
throws (1)
Pour "laisser remonter" à la méthode appelante une exception qu'il ne
veut pas traiter, le programmeur rajoute le mot réservé throws à la
déclaration de la méthode dans laquelle l'exception est susceptible de se
manifester.
21
Conclusion
Grâce aux exceptions, Java possède un mécanisme sophistiqué
de gestion des erreurs permettant d ’écrire du code « robuste »
Le programme peut déclencher des exceptions au moment
opportun.
Le programme peut capturer et traiter les exceptions grâce au
bloc d’instruction try …catch … finally
Le programmeur peut définir ses propres classes d ’exceptions
22