Les Exceptions en Java

Institut Supérieur des Études Technologiques
1/52
100%
Rendu du PDF...
Page 1 sur 52Lecteur de document UniversityLib

Les Exceptions en Java

Institut Supérieur des Études Technologiques · Advanced Object-Oriented Programming · course

Browse all programmation documents

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