Les Exceptions en Java
Cours de Programmation Orient e Objet Avanc e
ISET Bizerte
CHALOUAH Anissa
Anissa CHALOUAH
1
Introduction aux exceptions
1)
2)
3)
Introduction aux exceptions
Exception : D finition
Exception : M canisme
Anissa CHALOUAH
2
Introduction aux Exceptions
uAvoir un programme qui compile bien, nest en aucun cas une garantie dun
programme qui fonctionne correctement.
u un programme peut tre rendue instable par toute une s rie de facteurs :
w Des probl mes li s au mat riel : perte subite d'une connexion un port, un disque d fectueux...
w Des actions impr vues de l'utilisateur, entrainant par exemple une division par z ro...
w Des d bordements de stockage dans les structures de donn es...
uJava prend en charge la gestion de telles erreurs qui peuvent conduire
larr t brutale de lex cution du programme
Anissa CHALOUAH
A1
3
Diapositive 3
A1
conduire
Aymen; 12/02/2017
Exception : D finition
uUne exception est un signal qui
uindique quun v nement anormal (une erreur) est survenu dans un programme,
uinterrompt le flot d'ex cution du programme.
uLa r cup ration (le traitement) de lexception permet au programme de continuer son
ex cution.
Anissa CHALOUAH
4
Programme sans gestion de l'exception
---- java UseAction1
D but du programme
...Avant incident
java.lang.ArithmeticException : / by zero
---- : Exception in thread "main"
Anissa CHALOUAH
5
Diapositive 5
A1
Anissa; 29/01/2017
Gestions des exceptions : Principe
uLorsque quune erreur a t d tect e un endroit, on la signale en lan ant (throw) un
objet contenant toutes les informations que lon souhaite donner sur lerreur ( lancer
= cr er un objet disponible pour le reste du programme)
u lendroit o lon souhaite g rer lerreur, on peut attraper (catch) lobjet lanc
usi un objet lanc nest pas attrap du tout, cela provoque larr t du programme :
toute erreur non g r e provoque larr t.
uUn tel m canisme sappelle gestion des exceptions.
Anissa CHALOUAH
6
Gestions des exceptions : Principe
uUne exception est un signal d clench par une instruction et trait par une
autre
wIl faut que marquer les instructions susceptible de g n rer lerreur par un try
wIl faut quun objet soit capable de signaler ou lever (throw) une exception un
autre objet
wIl faut que lautre objet puisse saisir (catch) une exception afin de la traiter
uLorsque lexception se produit le contr le est transf r un gestionnaire
dexceptions:
wS paration de lex cution normale de lex cution en cas de condition anormale
Anissa CHALOUAH
7
Gestions des exceptions : M canisme(1)
uLorsqu'une exception est lev e, le programme arr te son ex cution
et ne reprendra que dans un bloc catch()ad quat de l'exception.
uLa m thode qui a lev l'exception va alors :
w la traiter imm diatement
wou va la propager la m thode appelante qui son tour va traiter
l'exception ou la propager.
uLa seule fa on de stopper ce parcours sera de traiter l'exception
( catch).
Anissa CHALOUAH
8
Gestions des exceptions : M canisme(2)
uIl faut voir ce ph nom ne comme des passes au rugby: l'exception est le ballon et il est
transmis de joueurs en joueurs jusqu' celui qui va 'traiter l'exception' et marquer l'essai.
Anissa CHALOUAH
9
Anissa CHALOUAH
10
Gestions des exceptions : Avantages
uLes exceptions permettent :
wde transf rer le flot de contr le de l'instruction qui l ve l'exception (qui detecte
l'anomalie) vers la partie du programme capable de la traiter ;
ud viter de surcharger le code d'une m thode avec de nombreux tests
Advertisement
concernant ces cas anormaux ;
ude regrouper le traitement des cas anormaux et erreurs ;
ude classifier les anomalies (diff rents types d'exceptions).
Anissa CHALOUAH
11
Hi rarchie des exceptions
Anissa CHALOUAH
12
Hi rarchie des exceptions
Exceptions sous contr les
(V rifi es)
Exceptions hors contr les
(Non v rifi es)
Anissa CHALOUAH
13
La classe throwable
uCette classe descend directement de la classe Object.
uLa classe Throwableest la classe m re de toutes les exceptions et erreurs : seules des
instances de Throwableou de ses classes d riv es peuvent tre lev e par linstruction
throwou tre argument dun catch.
uLa classe Throwablea un constructeur par d faut et un constructeur qui a en argument
une cha ne de caract res : le message de lexception.
Throwable()
Throwable(String message)
Le constructeur par d faut.
Le constructeur avec un param tre, le message de
l'exception.
Anissa CHALOUAH
14
La classe throwable (2)
uLes principales m thodes de la classe Throwable sont :
M thodes
R le
String getMessage( )
void printStackTrace( )
String toString()
lecture du message
affiche l'exception et l' tat de la pile d'ex cution au
moment de son appel
Anissa CHALOUAH
15
Exceptions hors contr le
(Unchecked exceptions)
uclasses d riv es de java.lang.Error :
wce sont des erreurs qui ne peuvent pas tre r cup r es (plus de m moire, classe
non trouv e etc.) ;
wVous n'avez pas traiter les instances de la classe Error
uclasses d riv es de java.lang.RuntimeException :
wce sont des erreurs de programmation, elles ne devraient pas se
produire(NullPointerException, IndexOutOfBoundsException).
Les exceptions hors contr le nont pas besoin d tre sp cifi dans la d claration
dune m thode (throws)
Anissa CHALOUAH
16
Unchecked Exceptions : RuntimeException exemples
wArithmeticException (e.g., bad computation such as divide by 0)
wArrayStoreException (e.g., storing wrong type of object in array)
wClassCastException (e.g., cannot typecast one class to another)
wIndexOutOfBoundsException (e.g., gone outside array bounds)
wNoSuchElementException (e.g., cannot find any more elements)
wNullPointerException (e.g., attempt to send message to null)
wNumberFormatException (e.g., trouble converting to a number)
Anissa CHALOUAH
17
Exceptions sous contr le
(checked exceptions)
uCe sont les classes d riv es de Exception (mais pas de RuntimeException).
uElles peuvent (doivent !) tre r cup r es et trait es.
uElles correspondent a la notion de robustesse.
Si on crit une m thode qui l ve une exception contr l e, on doit utiliser une
clause throws afin de d clarer l'exception au sein de la signature de la m thode.
Anissa CHALOUAH
18
Checked Exceptions : Exemples
uClassNotFoundException (e.g., tried to load an undefined class)
uCloneNotSupportedException (e.g., cannot make copy of object)
uDataFormatException (e.g., bad data conversion)
uIllegalAccessException (e.g., access modifiers prevent access)
uInstantiationException (e.g., problem creating an object)
uIOException
wEOFException (e.g., end of file exception)
wFileNotFoundException (e.g., cannot find a specified file)
Anissa CHALOUAH
19
Gestions des Exceptions
Anissa CHALOUAH
20
Traitement dune exception : mots cl s
On utilise trois types de blocs d'instructions :
utry { & } : permet de sp cifier une section de code sur laquelle on s'attend qu'une
exception (une erreur) soit lev e.
ucatch(exception e) { & } :
sert sp cifier le code ex cuter si une exception du type
de celle pass e en argument se produit. On peut avoir plusieurs blocs catch la suite
dun bloc try si n cessaire.
Advertisement
ufinally { & } :
introduit un code de traitement d'exception, qui sera toujours ex cut
quune exception est t lev ou non. Ce bloc est facultatif.
Anissa CHALOUAH
21
Traitement dune exception : syntaxe
try {
/ <lignes de code prot ger> /
}catch ( UneException E ) {
/ <lignes de code r agissant lexception UneException > /
}
Le type UneException est obligatoirement une classe qui h rite de la classe Exception.
Anissa CHALOUAH
22
Traitement dune exception : Exemple
---- java UseAction1
D but du programme.
...Avant incident
Interception exception
Fin du programme.
---- : operation complete.
Anissa CHALOUAH
23
Le bloc finally
ules clauses catch sont suivies de mani re optionnelle par un bloc finally qui
contient du code qui sera ex cut quelle que soit la mani re dont le bloc try a
t quitt .
ule bloc finally permet de sp cifier du code dont l'ex cution est garantie
quoi qu'il arrive (quune exception ait t lanc e ou pas par le bloc try)
u But: faire le m nage (fermer des fichiers, des connexions, etc..)
Anissa CHALOUAH
24
Le bloc finally : Syntaxe
try {
<code prot ger>
}
catch (exception1 e ) {
<traitement de l'exception1>}
catch (exception2 e ) {
<traitement de l'exception2>}
...
finally {
<action toujours effectu e>
}
Anissa CHALOUAH
25
Exceptions multiples
1)
Interceptions de plusieurs exceptions
2) Ordre dex cution de plusieurs exceptions hi rarchis es
Anissa CHALOUAH
26
Interceptions de plusieurs exceptions
uDans un gestionnaire try...catch, il est en fait possible d'intercepter plusieurs types
d'exceptions diff rentes et de les traiter.
ula syntaxe d'un tel gestionnaire fonctionne comme un s lecteur ordonn , ce qui signifie
qu'une seule clause d'interception est ex cut e.
uLorsquune erreur survient dans le bloc try,
wla suite des instructions du bloc est abandonn e
wles clauses catch sont test s s quentiellement
wle premier bloc catch correspondant lerreur est ex cut .
Anissa CHALOUAH
27
Interceptions de plusieurs exceptions : Syntaxe
try {
< bloc de code prot ger>
}
catch ( TypeException1 E ) { <Traitement TypeException1 > }
catch ( TypeException2 E ) { <Traitement TypeException2 > }
.....
catch ( TypeExceptionk E ) { <Traitement TypeExceptionk > }
" O TypeException1, TypeException12, ... , TypeExceptionk sont des classes d'exceptions obligatoirement
toutes distinctes.
" Seule une seule clause catch ( TypeException E ) {...}est ex cut e (celle qui correspond au bon type de
l'objet d'exception instanci ).
Anissa CHALOUAH
28
Interceptions de plusieurs exceptions : Exemple (1)
Anissa CHALOUAH
29
Interceptions de plusieurs exceptions : Exemple (2)
Anissa CHALOUAH
30
Interceptions de plusieurs exceptions : Exemple (3)
Anissa CHALOUAH
31
Ordre d'interception d'exceptions hi rarchis es
ulordre des blocs catch doit se faire de lerreur la plus sp cifique
la plus g n rale !
wOn choisira donc, lorsquil y a une hi rarchie entre les exceptions
intercepter, de placer le code de leurs gestionnaires dans lordre inverse
de la hi rarchie.
Anissa CHALOUAH
32
Ordre d'interception d'exceptions hi rarchis es : exemple
Advertisement
Soit une hi rarchie d'exceptions dans java
java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.ArithmeticException
|
+--java.lang.ArrayStoreException
|
+--java.lang.ClassCastException
Anissa CHALOUAH
33
Ordre d'interception d'exceptions hi rarchis es : exemple
R sultats de l'ex cution :
---- java UseAction2
UseAction2.java:19: exception java.lang.ArithmeticException has already been caught
catch(ArithmeticException E){
^
UseAction2.java:22: exception java.lang.ArrayStoreException has already been caught
catch(ArrayStoreException E){
^
UseAction2.java:25: exception java.lang.ClassCastException has already been caught
catch(ClassCastException E){
^
3 errors
Le compilateur proteste partir de la clause catch ( ArithmeticException E )en nous indiquant que l'exception est d j intercept e et
ceci trois fois de suite.
Anissa CHALOUAH
34
Ordre d'interception d'exceptions hi rarchis es : exemple
Anissa CHALOUAH
35
Throw, throws
Anissa CHALOUAH
36
Lever une exception (throw)
uLa Java machine peut d clencher une exception automatiquement comme
dans l'exemple de la lev e d'une ArithmeticException lors de l'ex cution de
l'instruction "x = 1/0 ;".
uLa Java machine peut aussi lever (d clencher) une exception votre
demande suite la rencontre d'une instruction throw.
Anissa CHALOUAH
37
Lever une exception (throw)
uLop rateur throw permet de lever une exception
if (<condition anormale>) {
throw new TypeException(<parametres effectifs>);
}
Anissa CHALOUAH
38
Lever une exception (throw) : Exemple
R sultats de l'ex cution :
---- java UseAction3
D but du programme.
...Avant incident
Interception exception : Mauvais calcul !
Fin du programme.
---- : operation complete.
Anissa CHALOUAH
39
Propagation dune exception (throws)
uLorsque les m thodes utilis es g n rent des exceptions, autres que des
RuntimeException, on a le devoir de capter ces exceptions.
uMais parfois il n'est pas possible ou pas souhait de traiter l'exception
imm diatement.
wDans ce cas on doit d clarer celle-ci en utilisant le mot-cl throws dans l'en-t te
de la m thode susceptible de g n rer l'exception en question.
wOn propage alors l'exception la m thode appelante, c'est dire la m thode qui
fait appel la m thode partir de laquelle l'exception est g n r e.
Anissa CHALOUAH
40
Propagation dune exception (throws)
Si une m thode est susceptible de lever une exception quon ne veut pas g rer
au sein de la m thode, elle se doit de pr venir les appelants avec le mot
cl throws.
Anissa CHALOUAH
41
Sp cification dune exception : Syntaxe
<modifieurs> Type maMethode(<parametres>) throws TypeExc1, TypeExc2, ...
Exemple
protected static void meth ( int x, char c )
throws IOException, ArithmeticException {
.....
}
Anissa CHALOUAH
42
Sp cification dune exception : Exemple
R sultats de l'ex cution :
---- java UseAction4
UseAction4.java:8: unreported exception java.io.IOException; must be
caught or declared to be thrown
throw new IOException("Probl me d'E/S !");
^
1 error
Anissa CHALOUAH
Advertisement
43
Sp cification dune exception : Exemple
R sultats de l'ex cution :
---- java UseAction4
D but du programme.
...Avant incident
Interception exception : Probl me d'E/S !
Fin du programme.
Anissa CHALOUAH
44
Exceptions personnalis es
Anissa CHALOUAH
45
uIl est possible de cr er dans vos applications vos propres classes
d'exception.
uLa nouvelle classe d'exception cr e doit obligatoirement h riter de la
classe Exception de Java ou d'une de ses sous-classes plus sp cifiques.
class MaClasseException extends Exception{
}
Anissa CHALOUAH
46
uLa structure de votre nouvelle classe d'exception doit au moins poss der un des deux
constructeurs:
" un sans param tre
" un avec un param tre de type String correspondant au message associ l'erreur g n r e.
class MaClasseException extends Exception{
MaClasseException(){
super();
}
MaClasseException(String monMessage){
super(monMessage);
}
}
Anissa CHALOUAH
Le constructeur prenant un objet de
type String en param tre permet de
specier un message pour l'exception.
Ce message est r cup rable par
getMessage().
47
uLes m thodes de la classe Exception seront galement disponibles pour votre nouvelle
classe. Vous pourrez donc:
wafficher la valeur du message ventuellement transmis en param tre au constructeur de la classe
gr ce la m thode getMessage()
wafficher, sur la sortie d'erreur, la liste des appels ayant conduit la g n ration de l'exception
gr ce la m thode printStackTrace()
Anissa CHALOUAH
48
Lever une exception personnalis e
uPour une exception personnalis e, le mode d'action est strictement identique
wIl faut sp cifier les exceptions propag es dans la signature de la m thode (throws)
wLes exceptions sont lev es ou envoy es par le mot-cl throw.
maMethode throws MaClasseException {
if (condition_particuliere)
throw new MaClasseException("Message d'erreur");
}
Anissa CHALOUAH
49
l
e
p
m
e
x
E
:
e
s
i
l
a
n
n
o
s
r
e
p
n
o
i
t
p
e
c
x
E
Anissa CHALOUAH
50