1 Exception Java
1 Exception Java
Dr. Alla LO
Enseignant-Chercheur en IA & BI
Université Alioune Diop de Bambey
18 mai 2026
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 1 / 138
Présentation du chapitre
Dans un programme réel, tout ne se passe pas toujours comme prévu. Un fichier peut être
absent, une donnée peut être invalide, une connexion peut échouer ou un utilisateur peut saisir
une valeur incorrecte.
Idée centrale
La gestion des exceptions permet de construire des applications plus fiables, plus lisibles et
plus faciles à maintenir.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 2 / 138
Objectif général du chapitre
Objectif général
À la fin de ce chapitre, l’étudiant doit être capable de comprendre le mécanisme des exceptions
en Java, de choisir la bonne stratégie de traitement des erreurs, de créer des exceptions
personnalisées et d’intégrer ces pratiques dans des applications orientées objet réalistes.
Ce chapitre ne se limite pas à la syntaxe try/catch. Il vise aussi à développer une bonne
manière de penser la robustesse logicielle.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 3 / 138
Objectifs spécifiques
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 4 / 138
Plan détaillé du chapitre
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 5 / 138
Plan de la section
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 6 / 138
Un programme réel est exposé à des imprévus
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 7 / 138
Conséquence d’une erreur non gérée
Lorsqu’une erreur n’est pas correctement gérée, plusieurs conséquences sont possibles :
arrêt brutal du programme ;
affichage d’un message incompréhensible pour l’utilisateur ;
perte de données ;
comportement incohérent ;
difficulté pour le développeur à comprendre l’origine du problème ;
faille de sécurité si des informations techniques sensibles sont affichées.
Point important
Un programme robuste n’est pas un programme qui n’a jamais d’erreur. C’est un programme
qui sait réagir correctement lorsqu’une erreur survient.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 8 / 138
Exemple simple : saisie d’un âge
Analyse
Toutes ces situations ne doivent pas être traitées de la même façon. Certaines relèvent d’un
simple contrôle de saisie, d’autres d’une exception.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 9 / 138
Le rôle des exceptions
Exemple d’idée
Une méthode de retrait bancaire peut signaler que le solde est insuffisant sans décider
elle-même comment informer l’utilisateur final.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 10 / 138
Sans exceptions : code mélangé
Sans mécanisme d’exception, on est souvent obligé de tester constamment les retours des
fonctions.
Cela peut donner un code :
plus long ;
plus difficile à lire ;
plus fragile ;
où les erreurs sont facilement oubliées ;
où le code métier est noyé dans les tests techniques.
Apport de Java
Java propose un système structuré pour représenter, lever, propager et capturer les erreurs.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 11 / 138
Plan de la section
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 12 / 138
Définition d’une exception
Définition
Une exception est un objet qui représente une situation anormale survenue pendant l’exécution
d’un programme.
À retenir
En Java, une exception n’est pas seulement un message : c’est un véritable objet.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 13 / 138
Erreur, exception et bug : ne pas confondre
Terme Sens
Erreur utilisateur Mauvaise saisie ou action incorrecte de l’utilisa-
teur.
Exception Signal produit pendant l’exécution pour indiquer
un problème.
Bug Défaut dans la logique ou l’implémentation du pro-
gramme.
Erreur système Problème grave venant de l’environnement : mé-
moire, JVM, système.
Remarque
Une exception peut être causée par un bug, mais toutes les exceptions ne sont pas forcément
des bugs.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 14 / 138
Exemple : une même erreur, plusieurs lectures
Conséquence
Le traitement doit dépendre du contexte : afficher un message à l’utilisateur, ignorer une ligne
invalide, arrêter l’importation, journaliser l’erreur, etc.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 15 / 138
La pile d’appels : stack trace
Lorsqu’une exception apparaît, Java produit souvent une trace appelée stack trace.
Cette trace indique :
le type de l’exception ;
le message associé ;
la méthode où l’erreur est apparue ;
la chaîne des méthodes appelantes ;
les numéros de ligne concernés.
Intérêt
La stack trace est très utile pour le développeur, car elle permet de retrouver l’origine d’une
erreur.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 16 / 138
Exemple de stack trace
Lecture :
le type est ArithmeticException ;
le message est / by zero ;
l’erreur est apparue dans [Link], ligne 5 ;
cette méthode a été appelée depuis [Link], ligne 10.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 17 / 138
Plan de la section
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 18 / 138
Toutes les exceptions héritent de Throwable
Idée importante
Même si Error et Exception héritent toutes les deux de Throwable, elles n’ont pas le même
rôle et ne doivent pas être traitées de la même façon.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 19 / 138
Schéma simplifié de la hiérarchie
Throwable
Error Exception
Exceptions RuntimeException
vérifiées non vérifiées
Lecture
Les exceptions vérifiées sont les exceptions qui héritent de Exception mais pas de
RuntimeException.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 20 / 138
La classe Error
Error représente des problèmes graves, souvent liés à la machine virtuelle Java ou au système.
Exemples :
OutOfMemoryError : mémoire insuffisante ;
StackOverflowError : pile d’appels saturée ;
VirtualMachineError : problème grave de JVM.
Bonne pratique
Dans une application métier classique, on ne capture généralement pas les Error. Elles
signalent souvent un état trop grave pour être corrigé localement.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 21 / 138
La classe Exception
Exception représente des problèmes que l’application peut souvent anticiper, traiter ou
propager.
Exemples :
fichier introuvable ;
erreur d’entrée/sortie ;
classe introuvable ;
problème SQL ;
règle métier non respectée.
À retenir
C’est la famille principale utilisée par le développeur pour représenter les erreurs applicatives.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 22 / 138
Exceptions vérifiées et non vérifiées
Checked exceptions
Unchecked exceptions
Le compilateur oblige à les gérer ou à les
Le compilateur n’oblige pas à les gérer.
déclarer.
Exemples :
Exemples :
NullPointerException
IOException
IllegalArgumentException
SQLException
ArithmeticException
ClassNotFoundException
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 23 / 138
Comment choisir ?
Situation Choix généralement adapté
L’appelant peut raison- Exception vérifiée
nablement corriger ou ré-
essayer
Le problème vient d’un Exception non vérifiée
mauvais paramètre ou
d’un mauvais état interne
Une règle métier impor- Exception personnalisée, selon le style du
tante est violée projet
Une ressource externe est Exception vérifiée ou encapsulation dans une
indisponible exception applicative
Conseil
Le choix dépend aussi de l’architecture du projet. L’essentiel est d’être cohérent.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 24 / 138
Plan de la section
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 25 / 138
Le bloc try
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 26 / 138
Structure générale
1 try {
2 // Code susceptible de provoquer une exception
3 } catch (TypeException e) {
4 // Traitement de cette exception
5 } finally {
6 // Code execute dans tous les cas
7 }
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 27 / 138
Exemple 1 : division par zéro
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 28 / 138
Explication de l’exemple de division
Dans cet exemple, l’instruction a / b provoque une exception car b vaut zéro.
Java crée alors un objet de type ArithmeticException. Comme cette exception correspond
au type indiqué dans le bloc catch, le programme exécute ce bloc.
Conséquence
Le programme ne s’arrête pas brutalement. Il affiche un message compréhensible puis continue
son exécution.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 29 / 138
Exemple 2 : conversion d’une chaîne
Méthode risquée
[Link]() peut échouer si la chaîne ne représente pas correctement un nombre
entier.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 30 / 138
Explication de l’exemple de conversion
La chaîne "12a" contient une lettre. Elle ne peut donc pas être convertie en entier.
Java lève alors une NumberFormatException.
Analyse pédagogique
Cette erreur est fréquente dans les programmes qui lisent des données saisies au clavier, des
fichiers CSV ou des formulaires web.
Bonne pratique
Lorsque les données viennent d’un utilisateur ou d’une source externe, il faut toujours prévoir
qu’elles peuvent être invalides.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 31 / 138
Plusieurs blocs catch
1 try {
2 String[] noms = {"Awa", "Moussa"} ;
3 [Link](noms[3]) ;
4
5 int x = [Link]("abc") ;
6
7 } catch (ArrayIndexOutOfBoundsException e) {
8 [Link]("Indice de tableau invalide.") ;
9 } catch (NumberFormatException e) {
10 [Link]("Format numerique invalide.") ;
11 } catch (Exception e) {
12 [Link]("Erreur generale : " + [Link]()) ;
13 }
Objectif
Traiter chaque type d’erreur avec un message ou une réaction adaptée.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 32 / 138
Ordre des catch
Règle d’or
Il faut placer les exceptions les plus spécifiques avant les exceptions plus générales.
Exemple :
NumberFormatException avant RuntimeException ;
IOException avant Exception ;
FileNotFoundException avant IOException.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 33 / 138
Mauvais ordre des catch
1 try {
2 int x = [Link]("abc") ;
3 } catch (Exception e) {
4 [Link]("Erreur generale") ;
5 } catch (NumberFormatException e) {
6 [Link]("Format invalide") ;
7 }
Erreur de compilation
Le bloc catch (NumberFormatException e) est inaccessible, car NumberFormatException
est déjà couverte par Exception.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 34 / 138
Le bloc finally
Le bloc finally sert à exécuter du code à la fin du traitement, qu’une exception ait été levée
ou non.
Usages courants :
fermer un fichier ;
libérer une connexion ;
supprimer un fichier temporaire ;
remettre une variable ou un état dans une situation propre ;
afficher une trace de fin de traitement.
À retenir
Le finally est surtout utile pour le nettoyage.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 35 / 138
Exemple avec finally
Observation
Même si la division échoue, le message "Fin du traitement" est affiché.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 36 / 138
Piège : return dans finally
Problème
Le return du bloc finally écrase la valeur retournée par le bloc try. Le résultat sera donc
2, pas 1.
Bonne pratique
Éviter return, break, continue et les nouvelles exceptions dans finally.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 37 / 138
Plan de la section
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 38 / 138
Différence entre throw et throws
Mot-clé Rôle
throw Lance explicitement une exception dans le corps
d’une méthode.
throws Déclare dans la signature d’une méthode que celle-
ci peut transmettre une exception.
Image simple
throw signifie : “je déclenche l’exception maintenant”.
throws signifie : “cette méthode peut échouer et transmettre l’exception à l’appelant”.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 39 / 138
Exemple avec throw
Explication
La méthode refuse de continuer si l’âge est négatif. Elle signale immédiatement que le
paramètre reçu est incorrect.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 40 / 138
Pourquoi utiliser IllegalArgumentException ?
Idée
Cette exception signale généralement une mauvaise utilisation de la méthode.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 41 / 138
Exemple avec throws
1 import [Link].* ;
2
3 public class LectureFichier {
4 public static String lirePremiereLigne(String chemin) throws IOException {
5 BufferedReader br = new BufferedReader(new FileReader(chemin)) ;
6 String ligne = [Link]() ;
7 [Link]() ;
8 return ligne ;
9 }
10 }
Explication
La méthode ne traite pas elle-même l’erreur. Elle oblige l’appelant à la gérer ou à la propager à
son tour.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 42 / 138
La propagation des exceptions
Lorsqu’une méthode ne capture pas une exception, celle-ci remonte vers la méthode appelante.
Ce mécanisme s’appelle la propagation.
Exemple conceptuel
main() appelle service(), qui appelle repository(), qui appelle la base de données. Si la
base échoue, l’exception peut remonter jusqu’à main() ou jusqu’à une couche chargée de la
gérer.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 43 / 138
Exemple de propagation
Lecture
L’exception naît dans niveau3, traverse niveau2, puis est capturée dans niveau1.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 44 / 138
Traiter ou propager ?
Propager si...
La méthode ne sait pas prendre une décision correcte. Dans ce cas, elle laisse une couche
supérieure décider.
Règle pratique
Il vaut mieux propager une exception que la capturer inutilement sans traitement réel.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 45 / 138
Plan de la section
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 46 / 138
Exceptions vérifiées : principe
Objectif
Le compilateur force le développeur à ne pas ignorer certains problèmes considérés comme
importants ou prévisibles.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 47 / 138
Exemples d’exceptions vérifiées
Point commun
Ces erreurs concernent souvent des ressources externes au programme.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 48 / 138
Exceptions non vérifiées : principe
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 49 / 138
Exemples d’exceptions non vérifiées
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 50 / 138
Exemple : IllegalArgumentException
Analyse
Un prix négatif ou un taux hors intervalle indique que la méthode est appelée avec de
mauvaises données.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 51 / 138
Faut-il capturer les RuntimeException ?
Exemple
Si un objet est null, il vaut mieux comprendre pourquoi il est null plutôt que capturer
partout NullPointerException.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 52 / 138
Plan de la section
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 53 / 138
Qu’est-ce qu’une ressource ?
Une ressource est un objet qui utilise un élément externe ou coûteux et qui doit être fermé
après utilisation.
Exemples :
fichier ouvert ;
flux d’entrée ou de sortie ;
connexion réseau ;
connexion à une base de données ;
scanner lié à un fichier ;
socket.
Risque
Si une ressource n’est pas fermée, elle peut provoquer des fuites de ressources, des fichiers
verrouillés ou des connexions saturées.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 54 / 138
Ancienne approche avec finally
1 BufferedReader br = null ;
2 try {
3 br = new BufferedReader(new FileReader("[Link]")) ;
4 String ligne = [Link]() ;
5 [Link](ligne) ;
6 } catch (IOException e) {
7 [Link]("Erreur de lecture") ;
8 } finally {
9 try {
10 if (br != null) [Link]() ;
11 } catch (IOException e) {
12 [Link]("Erreur lors de la fermeture") ;
13 }
14 }
Limite
Le code est long, répétitif et difficile à maintenir.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 55 / 138
Approche moderne : try-with-resources
1 import [Link].* ;
2
3 public class LectureNotes {
4 public static void main(String[] args) {
5 try (BufferedReader br = new BufferedReader(new FileReader("[Link]"))) {
6 String ligne ;
7 while ((ligne = [Link]()) != null) {
8 [Link](ligne) ;
9 }
10 } catch (IOException e) {
11 [Link]("Impossible de lire le fichier : " + [Link]()) ;
12 }
13 }
14 }
Avantage
La ressource est fermée automatiquement, même si une exception apparaît.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 56 / 138
Pourquoi try-with-resources est préférable ?
Condition
La ressource doit implémenter AutoCloseable ou Closeable.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 57 / 138
Plusieurs ressources dans le même try
1 try (
2 BufferedReader br = new BufferedReader(new FileReader("[Link]")) ;
3 PrintWriter pw = new PrintWriter(new FileWriter("[Link]"))
4 ) {
5 String ligne ;
6 while ((ligne = [Link]()) != null) {
7 [Link]([Link]()) ;
8 }
9 } catch (IOException e) {
10 [Link]("Erreur E/S : " + [Link]()) ;
11 }
Lecture
Le fichier d’entrée et le fichier de sortie sont fermés automatiquement à la fin du bloc.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 58 / 138
Plan de la section
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 59 / 138
Pourquoi créer ses propres exceptions ?
Les exceptions standards de Java décrivent bien les erreurs techniques, mais elles ne décrivent
pas toujours clairement les erreurs métier.
Exemples d’erreurs métier :
retrait impossible car solde insuffisant ;
inscription refusée car la classe est pleine ;
commande impossible car le stock est insuffisant ;
note invalide car elle dépasse 20 ;
réservation impossible car la date est déjà occupée.
Intérêt
Une exception personnalisée donne un vocabulaire clair au programme.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 60 / 138
Exception technique ou exception métier ?
Type Exemple
Exception technique Fichier absent, base inaccessible, erreur ré-
seau.
Exception métier Solde insuffisant, module complet, stock in-
suffisant.
Différence
Une exception technique vient souvent de l’infrastructure. Une exception métier vient d’une
règle du domaine étudié.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 61 / 138
Exception métier vérifiée
Effet
Comme elle hérite de Exception, le compilateur oblige à la traiter ou à la déclarer.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 62 / 138
Exception métier non vérifiée
Effet
Comme elle hérite de RuntimeException, le compilateur n’oblige pas à la traiter.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 63 / 138
Quelle forme choisir ?
Exception vérifiée
Utile lorsque l’appelant doit explicitement gérer le cas : afficher un message, proposer une
alternative, demander une confirmation.
Conseil
Dans un cours, il est intéressant de montrer les deux approches et d’expliquer le choix.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 64 / 138
Plan de la section
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 65 / 138
Contexte de l’étude de cas
Analyse
Certaines erreurs relèvent d’un mauvais paramètre. D’autres relèvent d’une règle métier
bancaire.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 66 / 138
Exception métier : solde insuffisant
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 67 / 138
Classe CompteBancaire
1 public class CompteBancaire {
2 private double solde ;
3
4 public CompteBancaire(double soldeInitial) {
5 if (soldeInitial < 0) {
6 throw new IllegalArgumentException("Solde initial invalide") ;
7 }
8 [Link] = soldeInitial ;
9 }
10
11 public void deposer(double montant) {
12 if (montant <= 0) {
13 throw new IllegalArgumentException("Le montant doit etre positif") ;
14 }
15 solde += montant ;
16 }
17
18 public double getSolde() {
19 return solde ;
20 }
21 } . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 68 / 138
Ajout de la méthode retirer
Lecture
Un montant négatif est une erreur d’appel. Un solde insuffisant est une règle métier.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 69 / 138
Programme principal
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 70 / 138
Analyse de l’étude de cas bancaire
Message pédagogique
Une bonne exception doit aider à comprendre le problème, pas seulement arrêter le programme.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 71 / 138
Plan de la section
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 72 / 138
Contexte
On souhaite développer une application permettant d’inscrire des étudiants dans un module.
Règles métier :
le nom de l’étudiant est obligatoire ;
l’âge minimum est 16 ans ;
chaque module a une capacité maximale ;
si le module est plein, l’inscription est refusée.
Objectif pédagogique
Montrer comment combiner validation des données, exception non vérifiée et exception métier
vérifiée.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 73 / 138
Exception InscriptionException
Rôle
Cette exception représente un échec d’inscription lié aux règles du module.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 74 / 138
Classe Etudiant
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 75 / 138
Analyse de la classe Etudiant
Principe objet
Un objet doit protéger sa propre cohérence interne.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 76 / 138
Classe Module
1 import [Link] ;
2 import [Link] ;
3
4 public class Module {
5 private String intitule ;
6 private int capaciteMax ;
7 private List<Etudiant> inscrits = new ArrayList<>() ;
8
9 public Module(String intitule, int capaciteMax) {
10 [Link] = intitule ;
11 [Link] = capaciteMax ;
12 }
13
14 public void inscrire(Etudiant e) throws InscriptionException {
15 if ([Link]() >= capaciteMax) {
16 throw new InscriptionException("Module complet : " + intitule) ;
17 }
18 [Link](e) ;
19 }
20 }
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 77 / 138
Programme principal
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 78 / 138
Plan de la section
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 79 / 138
Encapsuler une exception
Parfois, une méthode reçoit une exception technique, mais veut exposer une exception plus
compréhensible pour le reste de l’application.
Exemple :
une méthode d’accès aux données reçoit une SQLException ;
elle peut la transformer en ClientRepositoryException ;
elle doit conserver la cause initiale.
But
Ne pas exposer partout les détails techniques, tout en gardant les informations utiles au
diagnostic.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 80 / 138
Conserver la cause initiale
Bonne pratique
Utiliser super(message, cause) pour ne pas perdre l’exception d’origine.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 81 / 138
Journaliser les erreurs
Important
Afficher un message avec [Link]() peut être acceptable en apprentissage,
mais dans un projet réel on utilise un système de logs.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 82 / 138
Exemple avec [Link]
1 import [Link] ;
2 import [Link] ;
3
4 public class ServiceClient {
5 private static final Logger LOGGER =
6 [Link]([Link]()) ;
7
8 public void traiter() {
9 try {
10 int x = [Link]("abc") ;
11 } catch (NumberFormatException e) {
12 [Link]([Link], "Format numerique invalide", e) ;
13 }
14 }
15 }
Intérêt
Le log conserve le message, le niveau de gravité et la trace technique.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 83 / 138
Plan de la section
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 84 / 138
Bonnes pratiques principales
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 85 / 138
Mauvaise pratique : catch vide
1 try {
2 int age = [Link](saisie) ;
3 } catch (NumberFormatException e) {
4 // Rien du tout
5 }
Problème
L’erreur disparaît silencieusement. Le programme peut continuer avec un état incorrect et le
développeur aura du mal à diagnostiquer le problème.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 86 / 138
Meilleure version
1 try {
2 int age = [Link](saisie) ;
3 } catch (NumberFormatException e) {
4 [Link]("Veuillez saisir un age numerique valide.") ;
5 }
Encore mieux
Dans une application réelle : afficher un message simple à l’utilisateur et journaliser le détail
technique pour le développeur.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 87 / 138
Mauvaise pratique : capturer Exception partout
1 try {
2 effectuerTraitement() ;
3 } catch (Exception e) {
4 [Link]("Une erreur est survenue") ;
5 }
Problème
On ne sait pas quel problème s’est réellement produit. On risque de masquer une erreur grave
ou une erreur de programmation.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 88 / 138
Règles de décision simples
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 89 / 138
Plan de la section
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 90 / 138
Exercice 1 : lecture de code
On donne la situation suivante : un tableau contient trois notes, mais le programme essaie
d’afficher la quatrième.
Questions :
1 Quelle exception peut apparaître ?
2 Pourquoi cette exception apparaît-elle ?
3 Proposer une correction avec try/catch.
4 Proposer une meilleure correction sans exception.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 91 / 138
Correction avec try/catch
Explication
Les indices valides sont 0, 1 et 2. L’indice 3 n’existe pas.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 92 / 138
Correction préférable avec test
1 int indice = 3;
2 double[] notes = {12.5, 14.0, 9.5} ;
3
4 if (indice >= 0 && indice < [Link]) {
5 [Link](notes[indice]) ;
6 } else {
7 [Link]("Indice invalide") ;
8 }
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 93 / 138
Exercice 2 : validation d’une note
Écrire une méthode verifierNote(double note) qui respecte les règles suivantes :
une note doit être comprise entre 0 et 20 ;
si la note est invalide, lever une IllegalArgumentException ;
si la note est valide, afficher "Note valide".
Objectif
Savoir utiliser une exception non vérifiée pour signaler un mauvais paramètre.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 94 / 138
Correction exercice 2
Explication
Une note hors intervalle indique que la méthode reçoit une valeur incorrecte.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 95 / 138
Mini-TP : gestion d’un stock
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 96 / 138
Correction mini-TP : exception
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 97 / 138
Correction mini-TP : classe Produit
1 public class Produit {
2 private String nom ;
3 private double prix ;
4 private int quantite ;
5
6 public Produit(String nom, double prix, int quantite) {
7 if (nom == null || [Link]()) {
8 throw new IllegalArgumentException("Nom obligatoire") ;
9 }
10 if (prix < 0) {
11 throw new IllegalArgumentException("Prix negatif interdit") ;
12 }
13 if (quantite < 0) {
14 throw new IllegalArgumentException("Quantite negative interdite") ;
15 }
16 [Link] = nom ;
17 [Link] = prix ;
18 [Link] = quantite ;
19 }
20 }
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 98 / 138
Correction mini-TP : méthode vendre
Analyse
La quantité négative est une erreur de paramètre. Le stock insuffisant est une erreur métier.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 99 / 138
Correction mini-TP : programme principal
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 100 / 138
Plan de la section
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 101 / 138
Pourquoi parler de Java moderne ?
Le mécanisme général des exceptions existe depuis les premières versions de Java, mais
certaines pratiques ont évolué.
Aujourd’hui, un développeur Java doit savoir :
fermer automatiquement les ressources avec try-with-resources ;
regrouper certains traitements avec multi-catch ;
conserver la cause initiale d’une exception ;
éviter les messages techniques exposés à l’utilisateur ;
tester les cas d’erreur avec des tests unitaires ;
écrire du code lisible et maintenable, pas seulement du code qui compile.
Message pédagogique
Une bonne gestion d’exception fait partie de la qualité du logiciel, au même titre que la
lisibilité, les tests et l’architecture.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 102 / 138
Le multi-catch
Depuis Java 7, il est possible de capturer plusieurs types d’exceptions dans un même bloc
catch lorsque le traitement est identique.
1 try {
2 int age = [Link](saisieAge) ;
3 double prix = [Link](saisiePrix) ;
4 } catch (NumberFormatException | NullPointerException e) {
5 [Link]("Une valeur obligatoire est absente ou invalide.") ;
6 }
Intérêt
Le code est plus compact lorsque plusieurs exceptions conduisent exactement à la même
réaction.
Attention
Il ne faut pas regrouper des exceptions qui demandent des traitements différents. La lisibilité
reste prioritaire. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 103 / 138
Mauvais usage du multi-catch
1 try {
2 chargerFichier() ;
3 convertirDonnees() ;
4 } catch (IOException | NumberFormatException e) {
5 [Link]("Erreur de traitement") ;
6 }
Problème
Une erreur de fichier et une erreur de format n’ont pas toujours le même sens. Dans une
application réelle, on peut vouloir proposer de choisir un autre fichier dans un cas, et signaler
une ligne invalide dans l’autre.
Bonne question
Avant de fusionner plusieurs exceptions, il faut se demander : “Est-ce que la réaction attendue
est vraiment la même ?”
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 104 / 138
try-with-resources avec variable déjà créée
Dans les versions modernes de Java, une ressource déjà déclarée peut être utilisée dans un
try-with-resources si elle est finale ou effectivement finale.
1 BufferedReader br = new BufferedReader(new FileReader("[Link]")) ;
2
3 try (br) {
4 String ligne = [Link]() ;
5 [Link](ligne) ;
6 } catch (IOException e) {
7 [Link]("Erreur de lecture : " + [Link]()) ;
8 }
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 105 / 138
Exceptions supprimées : suppressed exceptions
Avec try-with-resources, une exception peut apparaître dans le bloc principal, puis une
autre pendant la fermeture de la ressource.
Dans ce cas :
l’exception principale est conservée ;
l’exception apparue pendant la fermeture est attachée comme exception supprimée ;
elle peut être retrouvée avec getSuppressed().
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 106 / 138
Afficher les exceptions supprimées
Usage réel
Dans une application professionnelle, ces informations sont généralement envoyées dans les
logs plutôt qu’affichées directement à l’utilisateur.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 107 / 138
Messages d’erreur : utilisateur vs développeur
Exemple
Utilisateur : “Impossible d’importer le fichier. Vérifiez son format.”
Log : NumberFormatException ligne 42, colonne montant, valeur=’abc’.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 108 / 138
Exception et sécurité
Risque
Un message trop technique peut aider un attaquant ou inquiéter inutilement l’utilisateur.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 109 / 138
Plan de la section
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 110 / 138
Pourquoi raisonner par couches ?
Dans une application réelle, le code est souvent organisé en plusieurs couches.
Idée centrale
Toutes les couches ne doivent pas gérer les exceptions de la même façon.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 111 / 138
Schéma de propagation dans une application
Interface utilisateur exception
message clair remontée
Service métier
règles et exceptions métier
Repository / DAO
conversion des erreurs techniques
Erreur fréquente
Mettre toute la gestion d’erreurs dans main() ou dans l’interface rend l’application difficile à
maintenir.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 113 / 138
Transformer une exception technique
Point clé
La cause initiale e est conservée. Le diagnostic reste possible.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 114 / 138
Stratégie professionnelle de traitement
Une stratégie simple peut être résumée ainsi :
Phrase à retenir
On ne capture pas une exception pour la faire disparaître ; on la capture pour prendre une
décision utile.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 115 / 138
Plan de la section
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 116 / 138
Pourquoi tester les exceptions ?
Objectif pédagogique
Faire comprendre que les tests d’échec sont aussi importants que les tests de réussite.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 117 / 138
Exemple de test avec JUnit
Lecture
Le test réussit si le constructeur de Produit lève bien une IllegalArgumentException.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 118 / 138
Vérifier le message d’une exception
1 @Test
2 void quantiteDemandeeSuperieureAuStock() {
3 Produit p = new Produit("Riz", 18000, 3) ;
4
5 StockInsuffisantException ex = assertThrows(
6 [Link],
7 () -> [Link](5)
8 );
9
10 assertTrue([Link]().contains("Stock insuffisant")) ;
11 }
Intérêt
On vérifie non seulement le type de l’exception, mais aussi la qualité du message produit.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 119 / 138
Cas limites à tester
Méthode
Une exception attendue doit apparaître dans les tests, pas seulement pendant les
démonstrations en classe.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 120 / 138
Plan de la section
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 121 / 138
Contexte de l’étude de cas
matricule;nom;note
Exemple :
ETU001;Awa Diop;15.5
Problèmes possibles
Le fichier peut être absent, une ligne peut être mal formée, une note peut être non numérique
ou hors intervalle.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 122 / 138
Types d’erreurs dans l’import CSV
Discussion
La bonne décision dépend du cahier des charges : import strict ou import tolérant.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 123 / 138
Exception personnalisée : NoteInvalideException
Rôle
Cette exception représente une donnée métier invalide : une note doit être comprise entre 0 et
20.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 124 / 138
Méthode de validation d’une note
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 125 / 138
Import strict : arrêt à la première erreur
1 public static void importerNotes(String chemin)
2 throws IOException, NoteInvalideException {
3
4 try (BufferedReader br = new BufferedReader(new FileReader(chemin))) {
5 String ligne ;
6 int numero = 0;
7
8 while ((ligne = [Link]()) != null) {
9 numero++;
10 String[] champs = [Link](" ;") ;
11
12 if ([Link] != 3) {
13 throw new NoteInvalideException(
14 "Ligne " + numero + " invalide : " + ligne) ;
15 }
16
17 double note = validerNote(champs[2]) ;
18 [Link](champs[1] + " : " + note) ;
19 }
20 }
21 } . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 126 / 138
Import strict ou import tolérant ?
Question de conception
La gestion des exceptions dépend souvent des règles métier, pas seulement de Java.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 127 / 138
Activité en classe : concevoir une stratégie d’import
Par groupe de deux ou trois, les étudiants doivent proposer une stratégie pour importer un
fichier de notes.
Questions à traiter :
1 Quelles erreurs doivent arrêter l’import ?
2 Quelles erreurs peuvent être simplement signalées ?
3 Faut-il créer une ou plusieurs exceptions personnalisées ?
4 Quel message afficher à l’utilisateur ?
5 Quelles informations faut-il mettre dans les logs ?
6 Quels tests unitaires faut-il écrire ?
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 128 / 138
Plan de la section
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 129 / 138
Décider : test simple ou exception ?
Situation Approche recommandée
Cas très prévisible dans le flux Utiliser un if.
normal
Violation d’une règle de mé- Lever IllegalArgumentException.
thode
Violation d’une règle métier Lever une exception métier.
Fichier ou base indisponible Capturer, journaliser ou propager se-
lon la couche.
Bug probable du programme Corriger le bug, ne pas le masquer.
Exemple
Tester si une liste est vide est souvent préférable à capturer une
IndexOutOfBoundsException.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 130 / 138
Checklist avant de terminer un code avec exceptions
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 131 / 138
Erreurs fréquentes à éviter
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 132 / 138
Synthèse intermédiaire : stratégie complète
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 133 / 138
Plan de la section
1 Pourquoi gérer les exceptions ?
2 Comprendre la notion d’exception
3 Hiérarchie des exceptions en Java
4 try, catch et finally
5 throw, throws et propagation
6 Exceptions vérifiées et non vérifiées
7 try-with-resources et ressources externes
8 Exceptions personnalisées
9 Étude de cas 1 : compte bancaire
10 Étude de cas 2 : inscription d’étudiants
11 Encapsulation et journalisation
12 Bonnes et mauvaises pratiques
13 Exercices guidés
14 Compléments Java moderne
15 Gestion des exceptions dans une architecture en couches
16 Tester les exceptions .
.
.
.
.
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
17 Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 134 / 138
Quiz de compréhension
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 135 / 138
Réponses attendues
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 136 / 138
Synthèse du chapitre
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 137 / 138
Message final
À retenir
Bien gérer les exceptions ne signifie pas capturer toutes les erreurs partout. Cela signifie savoir
où détecter l’erreur, où la traiter, où la propager, comment informer l’utilisateur et comment
aider le développeur à diagnostiquer le problème.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Dr. LO (UADB) Java avancé : Gestion robuste des exceptions 18 mai 2026 138 / 138