Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parMarie-Madeleine Sauvé Modifié depuis plus de 6 années
1
Chapitre 6 La gestion des Exceptions et les assertions
A. Nejeoui
2
La gestion des Exceptions et les assertions
Introduction Les programmeurs dans tout les langages essayent d’écrire des applications qui ne contiennent pas des bugs, or il es admit qu’aucun programme ne tourne parfaitement à 100%, les programmes doivent êtres préparés à des situations inattendues comme : - Mauvais type de données en entrée (formulaire) Fichier corrompu / introuvable Problèmes de connexions Défaillance matériel …etc. En Java ces événements inattendus qui surviennent lors de l’exécution s’appellent les Exceptions. Une application bien conçue doit être préparée pour la gestion des exceptions. La gestion des Exceptions et les assertions
3
La gestion des Exceptions et les assertions
Introduction On utilise les erreurs/exceptions pour traiter un fonctionnement anormal d’une partie d’un code (provoqué par une erreur ou un cas exceptionnel) En Java, une erreur (s’elle est bien gérée) ne provoque pas l’arrêt brutal du programme mais la création d’un objet, instance d’une classe spécifiquement créée pour être associée à des erreurs/exceptions La gestion des Exceptions et les assertions
4
Les trois catégories des Exceptions
Toutes les exceptions héritent de la classe Throwable, on distingue 3 grand catégories des exceptions : checked exception, unchecked exception et error. La gestion des Exceptions et les assertions
5
exceptions contrôlées (Checked Exceptions)
Soit les gérer où déclarer que votre application ne veut pas les gérer, est cela est vérifier par le compilateur c-à-d le compilateur vérifie si vous avez géré cette Exception où si vous avez délégué sa gestion à l’élément appelant(c’est pourquoi ils sont appelées des exceptions contrôlées). Ce type d’exception représente les situations qui peuvent survenir est que le développeur ne peut rien faire pour les éviter, supposons par exemple que vous essayer d’ouvrir un fichier. Ce fichier peut être introuvable. Java génère une exception de type FileNotFindException . Ce genre d’ exceptions est Représenté par la class Exception ce qui signifie que chaque fois qu’une exception de ce type survienne, java instancie un objet de cette classe et le passe à votre application, votre application peut utiliser cet objet peur obtenir des informations concernant le type d’exception générée et d’autres informations. La gestion des Exceptions et les assertions
6
exceptions contrôlées (Checked exception )
Même si vous pouvez mettre un test sur l’existence du fichier, sa ne résout pas le problème car, peut être une autre application qui a accès à ce fichier peut le supprimer juste une seconde avant d’y accéder. Ce qui fais que votre application doit être préparer pour gérer les exceptions de type FileNotFoundException lorsque vous voulez accéder à un fichier soit en lecture soit en écriture. Exceptions qui héritent de la classe Exception mais qui ne sont pas des RuntimeException Le compilateur vérifie que les méthodes utilisent correctement ces exceptions Toute méthode qui peut lancer une exception contrôlée, doit le déclarer dans sa déclaration La gestion des Exceptions et les assertions
7
Exceptions non contrôlées (Unchecked Exception)
Ce sont les Exceptions qui ne sont pas vérifiés par le compilateur. Pour savoir si on les a géré ou pas (c’est pourquoi ils sont appelés des Exceptions non contrôlées). Car ils peuvent être évitées par de bonnes pratiques de programmation. Par exemple supposons que nous avons un tableaux de 5 chaînes de caractères comme suit : String tab[] = new String[5]; Si vous essayez d’accéder à l’élément tab[5], java lève une exception de type ArrayIndexOutOfBoundException et votre programme se termine. Normalement par un simple test sur l’index vous pouvez éviter ce genre d’exception, c’est pourquoi java ne complique pas la vie au programmeur en lui forçant à gérer ce genre d’exception via le mécanisme de gestion d’exception. Ce genre d’exception est représenté par la classe RuntimeException La gestion des Exceptions et les assertions
8
La gestion des Exceptions et les assertions
Erreurs (Errors) Un autre type d’exceptions représente les erreurs sévères qui causent l’arrêt immédiat de l’application, le développeur ne peut rien faire ni pour éviter ni pour gérer ce type d’erreurs, par exemple : si la mémoire du système est insuffisante le programme se termine et génère une erreur de type OutOfMemoryError. Ce genre d’erreurs sont représentées par la classe Error La gestion des Exceptions et les assertions
9
Exemple d‘Exception non contrôlée‘
A La gestion des Exceptions et les assertions
10
La pile des appels (Stack trace)
Lorsqu’on exécute l’application avec des paramètres inadéquats la MVJ génère une exception de type NumberFormatException, comme vous voyer cette exception à causé l’arrêt immédiat de l’application. Car nous l’avons pas géré dans le code par un bloc try catch finnaly. Le programme n’a aucun autre choix que de se terminer ! La sortie par défaut que vous obtenez lorsqu’une exception non gérée est rencontré s’appelle « Stack Trace ». C’est une chaîne de caractères comportant Le 1 type + 2 Une description de l’exception + 3 la liste d’appels de méthodes : quelle méthode a appellé quelle méthode ..etc jusqu’à arriver à la méthode originale qui a généré l’exception. Le Stack trace aide à déboguer l’application. La lecture se fait du bas vers le haut 3 1 2 La gestion des Exceptions et les assertions
11
La gestion des Exceptions et les assertions
Gérer une exception BufferedReader reader = new BufferedReader (new InputStreamReader(System.in)); public String LireString() { String inputLine = ""; try { inputLine = reader.readLine(); } catch(IOException e) { System.out.println(e); System.exit(1); return inputLine; La gestion des Exceptions et les assertions
12
La gestion des Exceptions et les assertions
try catch finally Le principe consiste à regrouper toutes les instruction susceptibles de générer des exceptions dans un bloc (try) et associer un traitement spécifique pour chaque exception attrapée dans un bloc (catch). Ainsi si une exception est levée, le traitement y associé est éxécuter et l’application continue normalement son flux d’exécution. La gestion des Exceptions et les assertions
13
La gestion des Exceptions et les assertions
La gestion des Exceptions et les assertions
14
La gestion des Exceptions et les assertions
throws Si une partie d’une méthode lève une exception que vous voulez pas gérer avec un bloc try catch, vous déclarer que cette méthode lève ce genre d’exception en utilisant le mot clef throws comme suit: Exemple: BufferedReader reader = new BufferedReader (new InputStreamReader(System.in)); public String LireString() throws IOException { String inputLine = ""; inputLine = reader.readLine(); return inputLine; } La gestion des Exceptions et les assertions
15
La gestion des Exceptions et les assertions
Vocabulaire Une instruction, une méthode peut lever ou lancer une exception : une anomalie de fonctionnement provoque la création d’une Exception Une méthode peut attraper, saisir, traiter une exception par une clause catch d’un bloc try catch Une méthode peut laisser se propager une exception : – elle ne l’attrape pas par une clause catch – l’erreur « remonte » alors vers la méthode appelante qui peut elle-même l’attraper ou la laisser remonter La gestion des Exceptions et les assertions
16
Exception levée en dehors d’un bloc try
La méthode retourne immédiatement ; l’exception remonte vers la méthode appelante 2. La main est donnée à la méthode appelante 3. L’exception peut alors éventuellement être attrapée par cette méthode appelante ou par une des méthodes actuellement dans la pile d’exécution La gestion des Exceptions et les assertions
17
Exception levée dans un bloc try
Si une des instructions du bloc try provoque une exception, les instructions suivantes du bloc try ne sont pas exécutées et, – si au moins une des clauses catch correspond au type de l’exception, 1. la première clause catch appropriée est exécutée 2. l’exécution se poursuit juste après le bloc try catch – sinon, 1. la méthode retourne immédiatement 2. l’exception remonte vers la méthode appelante. La gestion des Exceptions et les assertions
18
Exécution d’un bloc try sans erreur ou exception
Dans les cas où l’exécution des instructions de la clause try ne provoque pas d’erreur/exception, – le déroulement du bloc de la clause try se déroule comme s’il n’y avait pas de bloc try-catch – le programme se poursuit après le bloc try-catch (sauf si exécution de return, break,…) La gestion des Exceptions et les assertions
19
Cas des exceptions non traitées
Si une exception remonte jusqu’à la méthode main() sans être traitée par cette méthode, – l’exécution du programme est stoppée – le message associé à l’exception est affiché, avec une description de la pile des méthodes traversées par l’exception (Stack trace) A noter : en fait, seul le thread qui a généré l’exception non traitée se termine; les autres threads continuent leur exécution La gestion des Exceptions et les assertions
20
Exemples de traitements dans un bloc catch
Fixer le problème et réessayer le traitement qui a provoqué le passage au bloc catch Faire un traitement alternatif Retourner (return) une valeur particulière Sortir de l’application avec System.exit() Faire un traitement partiel du problème et relancer (throw) la même exception (ou une autre exception) La gestion des Exceptions et les assertions
21
Souplesse dans le traitement des exceptions
La méthode dans laquelle l’erreur a eu lieu peut : 1 – traiter l’anomalie • pour reprendre ensuite le déroulement normal du programme, • ou pour faire un traitement spécial, différent du traitement normal 2 – ne rien faire, et laisser le choix du traitement à la méthode appelante qui en sait davantage pour faire un traitement correct du problème 3 – faire un traitement partiel de l’anomalie, et laisser les méthodes appelantes terminer le traitement La gestion des Exceptions et les assertions
22
Erreurs fréquentes liées au traitement des exceptions
1 - Si une variable est déclarée et initialisée dans un bloc try, et utilisée après le bloc try, le compilateur donnera un message d’erreur du type « undefined variable » ou « Variable xx may not have been initialized » Pour éviter cela, déclarer (et initialiser si nécessaire) la variable avant le bloc try 2 - Ne jamais attraper une exception en mettant dans le bloc catch un affichage de message qui ne donne que peu d’informations sur le Problème Au moins pendant le développement, le minimum à afficher : ce qu’affiche la méthode printStackTrace Sinon, on perd des informations précieuses pour la résolution du problème La gestion des Exceptions et les assertions
23
Exception et redifinition
Si votre méthode redéfinit une méthode de la super classe alors cette méthode peut soit lever une sous exception de l’exception levée par la méthode définit dans la super classe soit ne rien lever. Exemple : class A { void methode() throws IOException, NumberFormatException, SQLException { } class B extends A { void methode() throws EOFException { } Sinon vous aurez une erreur de type : Exception TypeException is not compatible with throws clause in A.methode() La gestion des Exceptions et les assertions
24
Exception personnalisée
L’API java contient plusieurs classes d’exceptions que vous pouvez réutiliser. Néanmoins, parfois vous vous retrouvez dans la nécessité de créer votre propre classe d’exception pour gérer un type d’erreur plus spécifique. Par exemple : vous voulez que l’utilisateur saisi une adresse . Dans ce cas vous pouvez créer une nouvelle exception pour lever ce type d’erreurs pulic Not Exception extends Exception { public Not Exception () {} public Not Exception (String msg){ super(msg);} } NB : Toutes les exceptions crées par l’utilisateurs doivent étendre Exception et non Error. Si vouv voulez que votre exception soit contrôlée étendez directement Exception sinon étendez RuntimeException La gestion des Exceptions et les assertions
25
Exception Personnalisée
La gestion des Exceptions et les assertions
26
La gestion des Exceptions et les assertions
Les exception sont utilisées pour améliorer la fiabilité de vos application Java. Les assertion aussi jouent un rôle similaire. Définition : Une assertion est une expression qui représente une condition que le programmeur suppose vrai à un emplacement donnée. Syntaxe : L'instruction assert se présente sous deux formes : assert expression1 ; et assert expression1 : expression2 ; expression1 est une expression booléenne, expression2 une expression d'un type quelconque. Dans les deux cas, l'exécution de l'instruction assert commence par évaluer expression1. Si cette expression est vraie, l'exécution continue sans que rien ne se passe. La gestion des Exceptions et les assertions
27
La gestion des Exceptions et les assertions
En revanche, si expression1 se révèle fausse alors une erreur de type java.lang.AssertionError est lancée. Si c'est la deuxième forme de assert qui a été utilisée, la valeur d'expression2 figure dans le message associe a l'erreur. Exemple : void Methode1(int x) { assert MIN < x && x < MAX; } void Methode2(int x) { assert MIN < x && x < MAX : "MIN < x && x < MAX, x = " + x; La gestion des Exceptions et les assertions
28
La gestion des Exceptions et les assertions
Conclusion La gestion des Exceptions et les assertions
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.