Gestion des exceptions en Java
Gestion des exceptions en Java
IFNTI S3
29 janvier 2024
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 2/1
Présentation des exceptions
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 3/1
Principe
Définition
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 4/1
Exemples
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 5/1
Exemples
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 6/1
Héritage
Organisation
Les exceptions sont des classes, elles peuvent donc être héritées.
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 7/1
Héritage
Hiérarchie en Java
Héritage partiel des Exceptions non contrôlées ou prédéfinies
exceptions en Java [Link] : problème dans
la JVM → arrêt du programme
[Link] :
prédéfinie → gestion par le
développeur facultative (ex : x/0)
Exceptions contrôlées
[Link] :
propagation/traitement par le
développeur obligatoire
Exécution
java -cp classes [Link]
c = 1
Exception in thread "main" [Link]: / by zero
at [Link]([Link])
at [Link]([Link])
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 9/1
Gestion et traitement des exceptions
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 10 / 1
Vocabulaire
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 11 / 1
Vocabulaire
Remarque
En Java, toute exception non contrôlée ([Link] ou
[Link]) levée par une méthode est
implicitement propagée.
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 12 / 1
Vocabulaire
Syntaxes (1/2)
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 14 / 1
Syntaxes et exemples
Syntaxes (2/2)
Attraper/Traiter une exception
methode ( . . . ) {
. . . // Ex é c u t é d a n s t o u s l e s c a s .
try {
// Ex é c u t i o n de c o d e s u s c e p t i b l e de l e v e r d e s e x c e p t i o n s
=
// de c l a s s e s E x c e p t i o n N ou l e u r s s o u s c l a s s e s .
}
catch ( Exception1 e ) {
// E x c e p t i o n 1 ne d o i t p a s ê t r e anc ê t r e de E x c e p t i o n 2 .
}
catch ( Exception2 e ) { }
c a t c h ( E x c e p t i o n 3 | E x c e p t i o n 4 e ) { // d e p u i s j a v a 7
// É v i t e l a d u p l i c a t i o n de c o d e e t l ’ u t i l i s a t i o n d ’ une
// c l a s s e d ’ e x c e p t i o n t r o p v a s t e ( c l a s s e mè r e p a r e x ) .
}
finally {
// Code t o u j o u r s e x é c u t é s a u f en c a s de s o r t i e de
// l a JVM ou de l ’ i n t e r r u p t i o n ou mort d ’ un t h r e a d .
}
. . . // Ex é c u t é s i a u c u n e e x c e p t i o n n ’ e s t l e v é e d a n s l e t r y .
}
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 15 / 1
Syntaxes et exemples
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 16 / 1
Syntaxes et exemples
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 17 / 1
Création d’exceptions
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 18 / 1
Principe
Utilisation et syntaxe
But
Créer son propre système d’erreurs
Traduire des exceptions de “trop bas niveau” (trop spécifiques
donc non gérées par défaut)
Syntaxe
Les exceptions sont des classes qui doivent hériter de Exception
ou de RuntimeException.
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 19 / 1
Principe
Exemple (1/4)
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 20 / 1
Principe
Exemple (2/4)
[Link]
p a c k a g e i f n t i . dap . c o u r s 4 . e x c e p t i o n s T a b l e a u ;
pu bl ic c l a s s TableauEntierNonTrouveException
extends TableauEntierNaturelDynamiqueException {
pu bl ic TableauEntierNonTrouveException ( String s ) {
super ( s ) ;
}
pu bl ic TableauEntierNonTrouveException () { }
}
[Link]
p a c k a g e i f n t i . dap . c o u r s 4 . e x c e p t i o n s T a b l e a u ;
public cl as s TableauIndiceHorsBornesException
extends TableauEntierNaturelDynamiqueException {
public TableauIndiceHorsBornesException ( String s ) {
super ( s ) ;
}
public TableauIndiceHorsBornesException () { }
}
Exemple (3/4)
[Link] (début)
p a c k a g e i f n t i . dap . c o u r s 4 . e x c e p t i o n s T a b l e a u ;
public c l a s s TableauEntierNaturelDynamiqueAvecException {
...
p u b l i c i n t g e t E n t i e r ( i n t i n d i c e ) throws TableauIndiceHorsBornesException {
i f ( i n d i c e < 0)
t h r o w new T a b l e a u I n d i c e N e g a t i f E x c e p t i o n ( ” I n d i c e ” +i n d i c e+ ”<0 i n t e r d i t ” ) ;
i f ( i n d i c e >= t a b . l e n g t h )
t h r o w new T a b l e a u I n d i c e H o r s B o r n e s E x c e p t i o n ( ” I n d . ”+i n d i c e+”>=b o r n e s u p . ” ) ;
r e t u r n tab [ i n d i c e ] ;
}
p u b l i c void s e t E n t i e r ( i n t i nd ic e , i n t v a l e u r ) throws
TableauEntierValeurNegativeException , TableauIndiceNegatifException {
i f ( v a l e u r < 0)
t h r o w new T a b l e a u E n t i e r V a l e u r N e g a t i v e E x c e p t i o n ( v a l e u r + ” < 0 ” ) ;
try {
tab [ i n d i c e ] = v a l e u r ;
}
catch ( IndexOutOfBoundsException e ) {
i f ( i n d i c e < 0 ) { t h r o w new T a b l e a u I n d i c e N e g a t i f E x c e p t i o n ( i n d i c e+” < 0 ” ) ; }
i n t [ ] tabtmp = new i n t [ i n d i c e + 1 ] ;
System . a r r a y c o p y ( tab , 0 , tabtmp , 0 , t a b . l e n g t h ) ;
tabtmp [ i n d i c e ] = v a l e u r ;
t a b = tabtmp ;
}
}
...
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 22 / 1
Principe
Exemple (4/4)
[Link] (suite)
...
p u b l i c i n t c h e r c h e r E n t i e r ( i n t v a l e u r ) throws
TableauEntierNonTrouveException , TableauEntierValeurNegativeException {
i f ( v a l e u r < 0) {
t h r o w new T a b l e a u E n t i e r V a l e u r N e g a t i v e E x c e p t i o n ( v a l e u r + ” < 0 ” ) ;
}
i f ( t a b . l e n g t h == 0 ) {
t h r o w new T a b l e a u E n t i e r V i d e E x c e p t i o n ( ” T a b l e a u v i d e ” ) ;
}
f o r ( i n t i =0; i<t a b . l e n g t h ; i ++) {
i f ( t a b [ i ] == v a l e u r ) { r e t u r n i ; }
}
t h r o w new T a b l e a u E n t i e r N o n T r o u v e E x c e p t i o n ( v a l e u r + ” non t r o u v é ” ) ;
}
public String toString () {
S t r i n g B u i l d e r s b = new S t r i n g B u i l d e r ( ) ;
f o r ( i n t i =0; i<t a b . l e n g t h ; i ++) {
s b . append ( t a b [ i ] ) ;
i f ( i != t a b . l e n g t h =1) { s b . append ( ” / ” ) ; }
}
r e t u r n sb . t o S t r i n g ( ) ;
}
...
}
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 23 / 1
Bonnes pratiques
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 24 / 1
Bonnes pratiques
public c l a s s ExceptionPerdue {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) t h r o w s E x c e p t i o n {
M e s s a g e I n T h e B o t t l e mp = new M e s s a g e I n T h e B o t t l e ( ) ;
t r y { mp . l a n c e E x c e p t i o n P e r d u e ( ) ; }
f i n a l l y { mp . l a n c e E x c e p t i o n Q u i C a c h e ( ) ; }
}
}
c l a s s MessageInTheBottle {
void lanceExceptionPerdue () throws PerdueException {
t h r o w new P e r d u e E x c e p t i o n ( ) ;
}
void lanceExceptionQuiCache () throws QuiCacheException {
t h r o w new Q u i C a c h e E x c e p t i o n ( ) ;
}
}
Chaı̂nage d’exceptions
Principe
Une exception levée est attrapée puis aussitôt une autre exception
est lancée, souvent engendrée par le traitement de la première.
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 26 / 1
Bonnes pratiques
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 27 / 1
Bonnes pratiques
Résultat
Exception in thread "main" [Link]:
Problème de chargement du fichier :/tmp/fichierquinexistepas
at [Link]([Link])
at [Link]([Link])
Caused by: [Link]: /tmp/fichierquinexistepas (No such file or directory)
at [Link](Native Method)
at [Link].<init>([Link])
at [Link].<init>([Link])
at [Link]([Link])
... 1 more
Amoudiya SIBITTI & Ichaou SAHM DAP : Gestion des exceptions en Java - IFNTI S3 - 29 janvier 2024 28 / 1