12/04/2017 12 Les exceptions Cours 11 Cours 11
Plan du cours 11 Définition Catégories Vocabulaire Avantages La syntaxe Exemple Ce qui se passe Classement des exceptions Délégation de la gestion d'une exception : throws Création d’une exception personnalisée API java.lang.Throwable API java.lang.Exception Cours 11
Définition Evénement rare qui nous contraint à perturber le déroulement habituel (séquences, répétitions…) des opérations. Ce n’est pas nécessairement une erreur. Ex : fin de fichier. Correspond souvent à une erreur possible (saisie incorrecte…). Peut être utilisée pour traiter des cas particuliers. Cours 11
12/04/2017 Catégories Par souci de sécurité, Java nous contraint à citer certains cas d’anomalies. Les événements exceptionnels sont classés en deux catégories : Ceux que l’on doit citer, les checked exceptions. Ceux que l’on peut citer. Java ne nous contraint pas à traiter les exceptions. On peut ne pas traiter l’exception : cela signifie que le bloc catch peut être vide même si Java nous oblige à le mettre. Cours 11 Cours 11
Vocabulaire try essayer (d’exécuter des instructions). 12/04/2017 Vocabulaire try essayer (d’exécuter des instructions). catch attraper, capter, ici traiter le cas exceptionnel. Java « lève » une exception, c’est-à-dire déclenche un événement lorsque la situation se produit. throw lancer, propager, diffuser. Cours 11 Cours 11
Avantages Ce mécanisme va dans le sens de la sécurité. 12/04/2017 Avantages Ce mécanisme va dans le sens de la sécurité. Il permet une programmation plus propre c’est-à-dire plus lisible. Cours 11 Cours 11
12/04/2017 La syntaxe try { Instructions susceptibles de lever des exceptions que l'on souhaite ou que l'on doit traiter } catch (Type1 d'exception exc) { Traitement de cette exception } ……… catch (Type2 d'exception exc) { Traitement de cette exception } finally { bloc exécuté systématiquement s'il est présent } L'instruction finally est facultative mais, si elle est présente, elle est systématiquement exécutée après le try qu'il y ait exception ou non. On peut y placer les fermetures de flux. exc est ici un nom formel. A développer C’est un paramètre formel donc son nom n’a pas d’importance. C’est un paramètre d’entrée. Cours 11 Cours 11
12/04/2017 Exemple int x, y, z ; ………………… try { z = x/y ; // division éventuelle par zéro } catch (ArithmeticException exc) { System.out.println("Division par séro") ; } …… Cours 11 Cours 11
12/04/2017 Ce qui se passe Lorsqu'une exception apparaît, Java crée un objet typique du problème rencontré et le diffuse. Tous ces objets appartiennent à une classe dérivée de Throwable. Cet objet peut être capté et traité par le bloc catch approprié. Si aucun catch ne convient, l'exception est propagée vers le bloc englobant ou est recherché un catch convenable. Et ainsi de suite… jusqu’à, éventuellement, la prise en compte par la machine virtuelle Java. Crée un objet, c’est-à-dire un ensemble de données (structure de données) et de méthodes associées. On trouve dans la structure de données toutes les caractéristiques de l’événement, l’heure… Lorsque le problème est pris en compte par la machine virtuelle, l’exécution s’arrête. Cours 11 Cours 11
Classement des exceptions 12/04/2017 Classement des exceptions Throwable Error Exception IOException CloneNot Supported Exception RunTime Exception Checked exceptions On peut créer ses propres classes d’exceptions. Un objet exception est toujours une instance d’une sous-classe de Throwable. NullPointer Exception EOF Exception FileNot Found Exception Illegal Argument Exception Number Format Exception Cours 11 Cours 11
Exceptions devant obligatoirement être signalées : IOException 12/04/2017 Exceptions devant obligatoirement être signalées : IOException EOFException FileNotFoundException CloneNotSupportedException Quelques exceptions qui peuvent ne pas être signalées : RunTimeException IllegalArgumentException NumberFormatException ArithmeticException IndexOutOfBoundsException NullPointerException D'une manière générale toutes les exceptions de la classe RunTimeException ne doivent pas être signalées. Cours 11 Cours 11
Délégation de la gestion d'une exception : throws 12/04/2017 Délégation de la gestion d'une exception : throws Lorsqu'une méthode ne traite pas une exception qui doit être contrôlée, elle doit déléguer ce traitement au bloc appelant. Pour ce faire, on utilise la clause throws (notez le "s"). Exemple : void maMéthode(String s) throws IOException {…………} Cours 11 Cours 11
Exemple Cours 11
Création d’une exception personnalisée On peut souhaiter traiter un problème en utilisant le mécanisme des exceptions. Il suffit de se donner la possibilité de créer des objets de la classe Exception. Pour ce faire, on crée une classe qui dérive du type d’exception le plus approprié ou tout simplement de Exception. Cours 11
Il suffit alors de créer et capturer l’exception: 12/04/2017 class MonException extends Exception { MonException (String message) { super(message); } } //----------------------------------------------------------------------------------- Il suffit alors de créer et capturer l’exception: try { if(………) // On suppose que l’exception peut se produire ici throw new MonException(“mon message”) ; … } catch (MonException ex) { // Traitement approprié … } …….. Développer un exemple Cours 11 Cours 11
API java.lang.Throwable 12/04/2017 API java.lang.Throwable Throwable() Constructs a new throwable with null as its detail message. Throwable(String message) Constructs a new throwable with the specified detail message. String getMessage() Returns the detail message string of this throwable. Cours 11 Cours 11
API java.lang.Exception Exception() Constructs a new exception with null as its detail message. Exception(String message) Constructs a new exception with the specified detail message. Cours 11