Plan de cours
Chapitre 1 : Présentation du langage JAVA
Chapitre 2 : Classes JAVA
Chapitre 3 : Héritage
Chapitre 4 : Exceptions
Chapitre 5 : Interfaces graphiques (Swing)
Chapitre 6 : JDBC
142
Chapitre 4 : Exceptions JAVA
Exceptions
Mécanisme permettant de traiter les comportements exceptionnels.
Constituent un moyen fiable et pratique d’effectuer un contrôle des erreurs rigoureux sans
alourdir le code.
La notion d’erreur fait partie intégrante de la fonction
En Java, la fonction peut lancer une exception en indiquant un type d’exception.
• L’exception se "propage" de retour de méthode en retour de méthode jusqu’à ce
qu’une méthode la traite.
• Si aucune méthode ne la prend en compte, il y a un message d’erreur d’exécution.
• Suite à une exception, toutes les instructions sont ignorées, sauf les instructions
chargées de capter cette exception.
143
Chapitre 4 : Exceptions JAVA
144
Chapitre 4 : Exceptions JAVA
Exceptions
Error Vs Exception
Différences clés entre Exception et Error :
1) En cas d’exception, nous pouvons le gérer en utilisant le bloc try/catch. Si une erreur se
produit, nous ne pouvons pas la gérer, l’exécution du programme sera terminée.
2) Une erreur se produit uniquement lorsque les ressources du système sont déficientes alors
qu’une exception est provoquée si un code présente un problème.
3) Une erreur ne peut jamais être récupérée alors qu’une exception peut être récupérée en
préparant le code pour gérer l’exception.
4) Si une erreur est survenue, le programme sera terminé de manière anormale. En revanche,
si l’exception se produit, le programme lancera une exception et le traitera à l’aide du
bloc try/catch.
5) Les erreurs sont de type non contrôlé, c’est-à-dire que les compilateurs ne connaissent
pas l’erreur, tandis qu’une exception est classée comme vérifiée et non contrôlée.
6) Les erreurs sont définies dans [Link] alors que les exceptions sont définies
dans [Link].
7) Les exceptions sont liées à l’application, tandis que les erreurs sont liées à l’environnement
dans lequel l’application est exécutée.
145
Chapitre 4 : Exceptions JAVA
Les exceptions de type RunTimeException
L’exécution du programme suivant provoque un message d’erreur indiquant une exception du
type ArrayIndexOutOfBoundsException, et l’arrêt du programme. Le tableau de 4 entiers
tabEnt a des indices de 0 à 3. L’accès à la valeur d’indice 5 provoque une exception non
captée.
146
Chapitre 4 : Exceptions JAVA
Les exceptions de type RunTimeException
Dans le programme suivant, la même erreur d’accès à un élément est captée par le
programme. Lors de la rencontre de l’erreur, les instructions en cours sont abandonnées et un
bloc de traitement (catch) de l’exception est recherché et exécuté. Le traitement se poursuit
après ce bloc sauf indication contraire du catch (return ou arrêt par exemple). Le message
"Fin du main" est écrit après interception de l’exception.
Exemples de résultats d’exécution :
147
Chapitre 4 : Exceptions JAVA
Exemple2 : les débordements de tableaux (dans une méthode)
l’instruction tabEnt[4] provoque
une exception dans la méthode
initTableau(). L’instruction qui suit
n’est pas prise en compte ;
l’exception n’est pas traitée dans
initTableau(). Les instructions qui
suivent l’appel de initTableau() dans
main() (le programme appelant) sont
ignorées également. Par contre, il
existe un bloc catch qui traite
l’exception. Le message "Fin de
main" est lui pris en compte après
le traitement de l’exception.
Exception :
[Link]
Fin de main
148
Chapitre 4 : Exceptions JAVA
Exemple2 : les débordements de tableaux (dans une méthode)
L’exception peut aussi être traitée dans initTableau() comme indiqué ci-dessous. Le
programme se poursuit normalement une fois le bloc catch exécuté (retour de initTableau(),
appel de ecrireTableau() et message de fin).
149
Chapitre 4 : Exceptions JAVA
Autres exemples d’exceptions de type RunTimeException
L’instructions suivante provoque une exception de type NullPointerException. s1 est une
référence null sur un (futur) objet de type String. On ne peut pas accéder au troisième caractère
de l’objet String référencé par null, d’où l’exception.
150
Chapitre 4 : Exceptions JAVA
Autres exemples d’exceptions de type RunTimeException
L’instructions suivante provoque une exception de type NumberFormatException . Le
programme suivant donne des exemples où une exception est lancée : chaîne à convertir en
entier ne contenant pas un entier (lecture erronée d’un entier par exemple), .
151
Chapitre 4 : Exceptions JAVA
Autres exemples d’exceptions de type RunTimeException
L’instructions suivante provoque une exception de type ArithmeticException. Le programme
suivant donne des exemples où une exception est lancée : division d’un entier par la valeur
zéro,
152
Chapitre 4 : Exceptions JAVA
Autres exemples d’exceptions de type RunTimeException
L’instructions suivante provoque une exception de type ClassCastException. Le programme
suivant donne des exemples où une exception est lancée : transtypage non cohérent de deux
objets de classes différentes.
153
Chapitre 4 : Exceptions JAVA
La syntaxe des exceptions
Les mots clés try, catch et finally
154
Chapitre 4 : Exceptions JAVA
La syntaxe des exceptions
Lève une exception
Une méthode qui lève une exception doit donner la liste des nouvelles classes d’exception
qu’elle peut déclencher. Seules les exceptions des classes Error, RuntimeError et de leurs
dérivées n’ont pas à être citées.
155
Chapitre 4 : Exceptions JAVA
La syntaxe des exceptions
Exceptions déclenchées par l'application
Il est également possible de déclencher nos propres exceptions, qu'elles soient instances de
classes fournies par l'API Java, ou de nos propres classes. Voyons cela sur l'exemple suivant
(déclenchement manuel d'une exception)
Nb: On notera la différence entre la génération manuelle d'une exception qui utilise le mot-clé throw (sans s ), et la déclaration au
niveau de la signature d'une méthode, qui utilise le mot-clé throws (avec un s ).
156
Chapitre 4 : Exceptions JAVA
La définition et le lancement d’excepetion
Il existe de nombreuses classes d’exceptions prédéfinies en Java, que l’on peut classer en trois
Catégories :
• Celles définies en étendant la classe Error : elles représentent des erreurs critiques qui ne
sont pas censée être gérées en temps normal. Par exemple, une exception de type
OutOfMemoryError est lancée lorsqu’il n’y a plus de mémoire disponible dans le système.
• Celles définies en étendant la classe Exception : elles représentent les erreurs qui doivent
normalement être gérées par le programme. Par exemple, une exception de type
IOException est lancée en cas d’erreur lors de la lecture d’un fichier
• Celles définies en étendant la classe RuntimeException : elles représente des erreurs
pouvant éventuellement être gérée par le programme. L’exemple typique de ce genre
d’exception est NullPointerException, qui est lancée si l’on tente d’accéder au contenu
d’un tableau ou d’un objet qui vaut null.
157