© Philippe GENOUD UGA Janvier 2017 1 Exceptions © Philippe GENOUD UGA Janvier 2
© Philippe GENOUD UGA Janvier 2017 1 Exceptions © Philippe GENOUD UGA Janvier 2017 1 Les Exceptions Philippe Genoud dernière mise à jour : 10/01/2017 © Philippe GENOUD UGA Janvier 2017 2 Exceptions © Philippe GENOUD UGA Janvier 2017 2 Exceptions ??? mécanisme utilisé très fréquemment dans le langage Java les exceptions sont rencontrées dans de nombreuses situations C:>java throwtest 3 i = 3 java.lang.ArrayIndexOutOfBoundsException: 3 at throwtest.b(throwtest.java:92) at throwtest.a(throwtest.java:65) at throwtest.main(throwtest.java:58) certaines exécutions peuvent faire apparaître (lever) des exceptions try { valSurface = Integer.parseInt(surface.getText()); } catch (NumberFormatException execpt) { surface.setText("ENTIER !!!"); return; // on sort sans creer d'instance } instructions try catch dans les programmes © Philippe GENOUD UGA Janvier 2017 3 Exceptions Exceptions ??? Dans la documentation de certaines méthodes les exceptions sont rencontrées dans de nombreuses situations © Philippe GENOUD UGA Janvier 2017 4 Exceptions © Philippe GENOUD UGA Janvier 2017 4 Exceptions ??? Mais alors qu’est-ce qu’une exception ? Un exception est un signal qui indique que quelque chose d'exceptionnel (par exemple une erreur) s'est produit, qui interrompt le flot d'exécution normal du programme. lancer (throw) une exception consiste à signaler ce quelque chose, attraper (catch) une exception permet d'exécuter les actions nécessaires pour traiter cette situation. © Philippe GENOUD UGA Janvier 2017 5 Exceptions © Philippe GENOUD UGA Janvier 2017 5 Mécanisme lorsqu'une situation exceptionnelle est rencontrée, une exception est lancée si cette exception n'est pas attrapée dans le bloc de code où elle a été lancée, elle est propagée au niveau du bloc englobant, si celui-ci ne l'attrape pas elle est transmise au bloc de niveau supérieur et ainsi de suite... si l'exception n'est pas attrapée dans la méthode qui la lance, elle est propagée dans la méthode qui invoque cette dernière. si la structure de bloc de la méthode d'invocation ne contient aucune instruction attrapant l'exception, celle-ci est à nouveau propagée vers la méthode de niveau supérieur. si une exception n'est jamais attrapée : propagation jusqu'à la méthode main() à partir de laquelle l'exécution du progamme a débutée, affichage d'un message d'erreur et de la trace de la pile des appels (call stack), arrêt de l'exécution du programme. © Philippe GENOUD UGA Janvier 2017 6 Exceptions © Philippe GENOUD UGA Janvier 2017 6 Mécanisme 3 Si il y a du code pour traiter (attraper) l’exception reprise du flot d ’exécution normal 3 4 4 Sinon on recommence comme en 2 5 5 Si aucun code dans la méthode pour traiter l’exception le contrôle est transmis au niveau de la méthode appelante et on recommence comme en 2 6 Et ainsi de suite... 6 STOP 7 Jusqu’à ce que l’on aboutisse au bloc du programme principal, alors arrêt de l’exécution et impression de la pile des appels. 7 public static void main (String[] args){ ... if (...) { ... methodeX() ... } ... } public static void methodeX(){ ... Point[] pts = new Point[10]; ... { Point b = barycentre(pts); ... } ... } public static Point barycentre(Point[] pts){ ... if (...) { for (int i = 0; i <= pts.length; i++) { ... pts[i] ... ... } ... } ... } Dépassement d’index, arrêt de l’exécution normale et lancement de ArrayOutOfBoundsException 1 pts[i] 1 Transmission du contrôle au bloc de niveau supérieur 2 2 © Philippe GENOUD UGA Janvier 2017 7 Exceptions © Philippe GENOUD UGA Janvier 2017 7 LinkageError Objets exceptions en JAVA les exceptions sont des objets toute exception doit être une instance d'une sous-classe de la classe java.lang.Throwable Throwable Exception pour définir de nouveaux types d'exceptions, en général on sous-classera (directement ou indirectement) java.lang.Exception Error Récupérables le programme a la possibilité d'attraper ces exceptions possède deux sous- classes standards RunTimeException ArrayIndexOutOfBounds Exception IOException EOFException FileNotFoundException non récupérables erreurs "systèmes" (plus de mémoire, problèmes chargement dynamique...) MyException1 MyException2 © Philippe GENOUD UGA Janvier 2017 8 Exceptions © Philippe GENOUD UGA Janvier 2017 8 Objets exceptions Puisqu'elles sont des objets les exceptions peuvent contenir : des attributs particuliers, des méthodes. Attributs et méthodes standards (définis dans java.lang.Throwable) Throwable String message Throwable() Throwable(String s) String getMessage() void printStackTrace() contient un message d'erreur décrivant l'exception renvoie le message d'erreur décrivant l'exception affiche sur la sortie erreur standard la liste des appels de méthodes ayant conduit à l'exception (backtrace). Constructeurs (sans et avec message d ’erreur) Permet le « chaînage » des exceptions Throwable cause Throwable(Throwable cause) Throwable getCause() © Philippe GENOUD UGA Janvier 2017 9 Exceptions © Philippe GENOUD UGA Janvier 2017 9 Objets exceptions La représentation des exceptions sous forme d'objets permet de mieux structurer la description et le traitement des erreurs "Because all exceptions that are thrown within a Java program are first-class objects, grouping or categorization of exceptions is a natural outcome of the class hierarchy. Java exceptions must be instances of Throwable or any Throwable descendant. As for other Java classes, you can create subclasses of the Throwable class and subclasses of your subclasses. Each "leaf" class (a class with no subclasses) represents a specific type of exception and each "node" class (a class with one or more subclasses) represents a group of related exceptions. " [The Java Tutorial, Campione &Walrath 97] © Philippe GENOUD UGA Janvier 2017 10 Exceptions © Philippe GENOUD UGA Janvier 2017 10 Objets exception Structuration de la description des exceptions #define EOF_ERROR 1 #define FILENOTFOUND_ERROR 2 #define ZIP_ERROR 3 Dans ce bon vieux C En Java EOFException ZipException FileNotFound Exception Les exceptions étant des objets, leur structuration en une hiérarchie de classes permet de les traiter à différents niveaux d'abstraction (via polymorphisme) Exception IOException Niveau d'abstraction qui permet de désigner toutes les exceptions liées au E/S © Philippe GENOUD UGA Janvier 2017 11 Exceptions © Philippe GENOUD UGA Janvier 2017 11 Objets exception On peut être amené à définir une hiérarchie de classes (sans nécessairement définir de nouveaux attributs et nouvelles méthodes) uniquement dans un souci de structuration et de typage des exceptions Exception CompteException int noCompte CompteException(c : int, mess :String) getNoCompte() : int CompteNotFoundException CompteOpException DebiterException VirerException class CompteException extends Exception { private int noCompte; public CompteException(int c, String mess) { super(mess); noCompte = c; } public int noCompte() { return noCompte; } } class CompteNotFoundException extends CompteException { public CompteNotFoundException(int c, String mess) { super(c,mess); } } class CompteOpException extends CompteException { public CompteOpException(int c, String mess) { super(c,mess); } } © Philippe GENOUD UGA Janvier 2017 12 Exceptions © Philippe GENOUD UGA Janvier 2017 12 Poursuite de l ’exécution Traitement try{ … } délimite un ensemble d'instructions susceptibles de déclencher une(des) exception(s) pour la(les)quelles une gestion est mise en œuvre cette gestion est réalisée par des blocs catch(TypeDexception e){ … } qui suivent le bloc try permettent d'intercepter ("attraper") les exceptions dont le type est spécifié et d'exécuter alors du code spécifique. String nomFichier; System.out.print("nom fichier :"); nomFichier = LectureClavier.lireChaine(); String[] text=lireTexte(nomFichier); for (int i = 0; i < text.length; i++) { System.out.println(text[i]); } ... String[] lireTexte(String nomfic){ ... ... FileReader f= new FileReader( new File(nomfic)); ... ... ... return ... ; } try { } catch (FileNotFoundException e) { e.printStackTrace(); System.out.println(e.getMessage()); ... } ... ... Le fichier n'existe pas ! Traitement local de l’erreur création d’un objet FileNotFoundException et arrêt de l'éxécution normale © Philippe GENOUD UGA Janvier 2017 13 Exceptions © Philippe GENOUD UGA Janvier 2017 13 Traitement un bloc try est suivi par une ou plusieurs clauses catch qui permettent d'intercepter ("attraper") les exceptions dont le type est spécifié (dans la clause catch) et d'exécuter alors du code spécifique. un seul bloc catch peut être exécuté : le premier suceptible "d'attraper" l'exception. chaque clause catch doit être déclarée avec un argument de type Throwable ou une sous-classe de Throwable quand une exception est levée dans le bloc try, la première clause catch dont le type de l'argument correspond à celui de l'exception levée est invoquée clause catch dont l'argument est de même classe que l'exception levée, clause catch dont l'argument est une super-classe de la classe de l'exception levée. l'ordre des blocs catch est donc très important. © Philippe GENOUD UGA Janvier 2017 14 Exceptions ... try { // séquence de code pouvant lever //des exceptions de type Except1, // Except2 ou Except3 ... } catch (Except1 e1) { // e1 est l'exception qui a été levée // dans le bloc try System.out.println(e1.getMessage()); e1.printStackTrace(); // ... } catch (Except2 e2) { // ... } catch (Except3 e3) { // ... } Traitement Exception Except1 Except2 Except3 Exception de type :Except1 ou Except2 ou Except3 quel bloc catch va la traiter ? ? Exemple : d’après "Programmation Java", J.F. Macary, N. Cédric, Ed. Eyrolles 1996 © Philippe GENOUD UGA Janvier 2017 15 Exceptions Traitement Exception GrandMère Except2 Except3 type Except2 ? ... try { // séquence de code pouvant lever //des exceptions de type Except1, // Except2 ou Except3 ... } catch (Except2 e2) { // e2 est l'exception qui a été levée // dans le bloc try System.out.println(e2.getMessage()); e2.printStackTrace(); // ... } catch (Except1 e1) { // ... } catch (Except3 e3) { // ... } type Except1 uploads/s1/ exceptions.pdf
Documents similaires
-
21
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Aoû 18, 2022
- Catégorie Administration
- Langue French
- Taille du fichier 2.0875MB