Vous êtes sur la page 1sur 33

Gestion des exceptions

Introduction
• Les exceptions représentent le mécanisme de gestion des erreurs intégré au langage Java.
• Une exception est composée d’objets représentant les erreurs et d'un ensemble de trois
mots-clés qui permettent de détecter et de traiter ces erreurs (try, catch et finally ) mais
aussi de les lever ou les propager (throw et throws).
Lors de la détection d'une erreur, un objet qui hérite de la classe Exception est créé (une
exception est levée) et propagé à travers la pile d'exécution jusqu'à ce qu'il soit traité.
Si on fait appel à une méthode pouvant potentiellement générer une exception dans un
bloc de code, on doit soit essayer de la récupérer avec try/catch, soit ajouter le mot-clé
throws dans la déclaration du bloc. Sinon, il y a une erreur à la compilation.
Introduction
Types d’exceptions
Classes d’exception
Méthodes de la classe Throwable
Traiter une exception
• Pour intercepter et traiter une exception, on utilise l'instruction try / catch / finally dont la
syntaxe globale est la suivante.
Traiter une exception
Traiter une exception
Traiter plusieurs exceptions
• S'il y a plusieurs types d'erreurs et d'exceptions à intercepter, il faut définir autant de blocs
catch que de types d'événements.
• Ainsi dans l'ordre séquentiel des clauses catch, Il faut traiter en premier les exceptions les
plus précises (sous-classes) avant les exceptions plus générales.
Traiter plusieurs exceptions
• JSE 7.0 a apporté une facilité pour attraper plusieurs types d'exceptions avec un seul bloc
catch : l'opérateur « multi-catch ».
Relayer une exception
• Si on ne doit pas traiter une erreur dans un bloc de code, alors il faut indiquer sur la
signature de la méthode qu’on va relayer le traitement de l'exception au niveau de la
méthode « appelante », en utilisant le mot-clé throws à la suite de la liste de paramètres
de la méthode.
Relayer une exception
• Les méthodes pouvant lever des exceptions doivent inclure une clause throws dans leur
en-tête dans le but de:
avoir une valeur documentaire
préciser au compilateur que cette méthode pourra lever cette exception et que toute
méthode qui l'appelle devra prendre en compte cette exception (traitement ou
propagation).
• Si la méthode appelante ne traite pas l'erreur ou ne la propage pas, le compilateur génère
l'exception « XXException must be caught or it must be declared in the throws clause of
this method ».
• Java n'oblige à déclarer les exceptions dans l'en-tête de la méthode que pour les
exceptions dites contrôlées (checked). Les exceptions et erreurs qui héritent de
RunTimeException et de Error sont non contrôlées.
Relayer une exception
• Lorsqu’un programme détecte un état exceptionnel, il peut le signaler en levant une
exception grâce au mot-clé throw.
Classe d’exception personnalisée
• On peut créer des classes d’exception personnalisée qui héritent directement de la classe
Exception ou RunTimeException mais pas de la classe Error.
• Il est préférable, par convention, d'inclure le mot « Exception » dans le nom de la nouvelle
classe.
Classe d’exception personnalisée
Classe d’exception personnalisée
Classe d’exception personnalisée
Syntaxe du « try-with-resources »
• Le « try-with-resources », syntaxe ajoutée à Java à partir de JSE 7.0, complète les
possibilités de l'instruction try.
• Cette variante de l'instruction try est en lien direct avec l'interface AutoCloseable qui ne
définit qu'une seule méthode abstraite : la méthode close().
• Ainsi, tout type de données concret implémentant cette interface doit proposer une
méthode close qui garantira à l'instruction « try-with-resources » la fermeture de la
ressource.
Syntaxe du « try/finally » et « try-with-resources »
API de logging
Introduction
• Le logging permet de gérer des messages émis par une application durant son exécution
et de permettre leur exploitation immédiate ou a posteriori.
• Ces messages sont très utiles lors de la mise au point d'une application ou lors de son
exploitation pour comprendre son fonctionnement ou résoudre une anomalie.
• Le logging est nécessaire dans une application pour :
Déboguer : pratique lorsque la mise en œuvre d'un débogueur n'est pas facile.
Obtenir des traces d'exécution (démarrage/arrêt, informations, avertissements, erreurs
d'exécution, ...
Faciliter la recherche d'une source d'anomalie (stacktrace, ...)
Comprendre ou vérifier le flux des traitements exécutés : traces des entrées/sorties dans
les méthodes, affichage
• Les principales API de log sont: API java.util.logging, API Log4J 2 et API SLF4J (Simple
Logging Facade for Java)
Introduction
• Une API de logging fait généralement intervenir trois composants principaux :
Logger : invoqué pour émettre grâce au framework un message généralement avec un
niveau de gravité associé
Formatter : utilisé pour formater le contenu du message
Appender : utilisé pour envoyer le message à une cible de stockage (console, fichier, base
de données, email, ...
• Pour une bonne mise en œuvre du logging, il faut respecter quelques règles suivantes :
Chaque message doit contenir la date/heure d'émission et la classe émettrice
Ne jamais utiliser de System.out pour afficher des messages mais utiliser une API de
Logging
Ne jamais utiliser la méthode printStackTrace() de la classe Exception pour afficher des
messages mais utiliser une API de Logging
Eviter les messages émis trop fréquemment (par exemple dans une boucle avec un
nombre important d'itérations ou dans une méthode fréquemment invoquée, ...)
Utiliser le niveau de gravité en adéquation avec le message
Mise en œuvre de JUL
• Pour produire des logs, on doit réaliser au minimum deux étapes :
Il faut commencer par acquérir un logger.
Puis, il faut utiliser le logger pour générer les logs avec les niveaux désirés: OFF, INFO,
SEVERE, WARNING,…, ALL.
Collections
Introduction
• On appelle collections ou API Collections un ensemble de classes et d’interfaces fournies
par l’API standard et disponibles pour la plupart dans le package java.util et propose un
ensemble d'interfaces et de classes dont le but est de stocker de multiples objets:
List : collection d'éléments ordonnés qui accepte les doublons
Set : collection d'éléments non ordonnés par défaut qui n'accepte pas les doublons
Map : collection sous la forme d'une association de paires clé/valeur
Queue et Deque : collections qui stockent des éléments dans un certain ordre avant qu'ils
ne soient extraits pour traitement
Elle définit également :
• deux interfaces pour le parcours de certaines collections : Iterator et ListIterator.
• une interface et une classe pour permettre le tri de certaines collections : Comparable
et Comparator
• des classes utilitaires : Arrays, Collections
Listes: classe ArrayList
• C’est une implémentation de l’interface List, elle stocke les éléments de la liste sous la
forme de blocs en mémoire.
Listes: interfaces et classes
Listes: classe ArrayList
Ensembles: classe TreeSet
• Les ensembles (set) sont des collections qui ne contiennent aucun doublon.
• Deux éléments e1 et e2 sont des doublons si : e1.equals(e2)==true ou si e1 vaut null et e2
vaut null.
• La classe TreeSet contrôle l’unicité de ces éléments en maintenant en interne une liste
triée par ordre naturel des éléments.
Ensembles: interfaces et classes
Tableaux associatifs: classe TreeMap
• Un tableau associatif (parfois appelé dictionnaire) ou map permet d’associer une clé à une
valeur.
• Un tableau associatif ne peut pas contenir de doublon de clés.
• Le Java Collections Framework fournit plusieurs implémentations de tableaux associatifs
: TreeMap, HashMap, LinkedHashMap.
Tableaux associatifs: interfaces et classes

Vous aimerez peut-être aussi