La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Java : Exceptions H Batatia. 5/03/2004Java12: H.Batatia2 Exemple 1 public class Bonjour { public static void main(String[] args) { System.out.println("Bonjour.

Présentations similaires


Présentation au sujet: "Java : Exceptions H Batatia. 5/03/2004Java12: H.Batatia2 Exemple 1 public class Bonjour { public static void main(String[] args) { System.out.println("Bonjour."— Transcription de la présentation:

1 Java : Exceptions H Batatia

2 5/03/2004Java12: H.Batatia2 Exemple 1 public class Bonjour { public static void main(String[] args) { System.out.println("Bonjour " + args[0]); } Testez java Bonjour

3 5/03/2004Java12: H.Batatia3 Exemple 2 public class DivisionPar0 { public static void main(String[] args) { int n = 0; int m = 10 / n; } Tester

4 5/03/2004Java12: H.Batatia4 Exemple 3 public class Convertir { public static void main(String[] args) { int n = Integer.parseInt(args[0]); System.out.println("n= " + n); } Testez 10, puis dix

5 5/03/2004Java12: H.Batatia5 Exception Les trois exemples précédents ont produit des erreurs d'exécution, signalées respectivement par : –java.lang.ArrayIndexOutOfBoundsException –java.lang.ArithmeticException –java.lang.NumberFormatException Dans ces trois cas, la java virtuelle machine s'est terminée normalement Elle a signalé l'erreur –l'indice est en dehors de la taille de la chaîne –il y a une erreur arithmétique –l'argument n'est pas un nombre en format valide Ces erreurs sont des exceptions –Elles sont dites exceptions d'exécution –Elles ne sont pas traitées

6 5/03/2004Java12: H.Batatia6 Autre exception Il existe d'autres exceptions –exemple les exceptions d'entrées/sorties –celles-ci doivent être traitées

7 5/03/2004Java12: H.Batatia7 Exemple class Fraction implements Cloneable { int n,d; Fraction( int i, int j){ n = i; d=j; } public String toString(){ return "("+ n + "/" + d +")"; } public Object clone(){ return super.clone(); } Ajouter throws CloneNotSupportedException après clone()

8 5/03/2004Java12: H.Batatia8 suite public class Test { public static void main(String[] args) { Fraction i = new Fraction(4,3); Fraction j = (Fraction) i.clone(); System.out.println(i + ";" + j); } Quelle conclusion peut-on tirer?

9 5/03/2004Java12: H.Batatia9 Exception une exception est un objet créé quand un problème survient lors de l'exécution –souvent ces problèmes ont une cause externe (format de données inattendu, problème de réseau, panne disque)

10 5/03/2004Java12: H.Batatia10 Traitement de l'exception Un objet exception est une instance de Exception ou d'une de ses sous-classes Il contient une description de l'erreur survenue Un tel objet peut être saisi par une méthode et traiter, évitant ainsi que la JVM arrête le programme Si l'objet n'est pas saisi, il sera "passé" à l'appelant jusqu'à parvenir à la JVM qui arrête le programme et affiche un message d'erreur

11 5/03/2004Java12: H.Batatia11 try / catch try { // instructions pouvant générer une exception } catch ( UnTypeException ex ) { // instructions qui traitent ce type d'exception }.... // un autre bloc catch catch ( AutreTypeException ex ) { // instructions qui traitent cette exception } // Instructions suivantes

12 5/03/2004Java12: H.Batatia12 Blocs catch Il peut y avoir zéro, un, ou plusieurs blocs catch Un seul de ces blocs sera exécuté C'est celui correspondant à la première exception saisie Il faut placer les catch en partant de l'exception la plus spécifique vers l'exception la plus générale au sens de l'héritage –si les exceptions traitées n'ont pas de relation d'héritage, l'ordre n'a pas d'importance

13 5/03/2004Java12: H.Batatia13 Traitement public class Bonjour { public static void main(String[] args) { try { System.out.println("Bonjour " + args[0]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println ("Usage: java Bonjour nom"); }

14 5/03/2004Java12: H.Batatia14 Traitement 2 public class Bonjour { public static void main(String[] args) { try { System.out.println("Bonjour " + args[0]); } catch (ArrayIndexOutOfBoundsException e) { System.out.print ("Donner un nom : "); String s = Clavier.lireChaine(); System.out.println("Bonjour " +s); }

15 5/03/2004Java12: H.Batatia15 Exercice Réécrire les exemples 2 et 3 en traitant les exceptions

16 5/03/2004Java12: H.Batatia16 Types d'exceptions

17 5/03/2004Java12: H.Batatia17 Exception RunTimeException les exceptions liées aux problèmes d'exécutions sont générées automatiquement par la JVM, par exemple en cas de –division par 0 –dépassement de la capacité d'un tableau –format de données invalide…

18 5/03/2004Java12: H.Batatia18 Exemple class AutreException { public static void main (String[] args) { try { int n = Integer.parseInt(args[0]); int m = 1000/n; System.out.println (""+m); } catch (NumberFormatException ne) { System.out.println (args[0] + " : n'est pas un nombre"); } catch (ArithmeticException ae) { System.out.println ("Division par zero"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println ("Pas d'argument"); } System.out.println ("Fin"); }

19 5/03/2004Java12: H.Batatia19 Exemple class AutreException2 { public static void main (String[] args) { int n = 0, m = 0; try { n = Integer.paseInt(args[0]); } catch (NumberFormatException ne) { System.out.println (args[0] + " : n'est pas un nombre"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println ("Pas d'argument"); } try { m = 1000/n; } catch (ArithmeticException ae) { System.out.println ("Division par zero"); } System.out.println (""+m); System.out.println ("Fin"); }

20 5/03/2004Java12: H.Batatia20 Origines des exceptions 1.condition d'exécution anormale –erreur d'évaluation d'une expression division par zéro; type de donnée invalide; … –erreur de chargement d'une classe.class introuvable – dépassement de capacité limite de mémoire dépassée; accès à un élément de tableau inexistant;… 2.instruction throw 3.erreur de la JVM

21 5/03/2004Java12: H.Batatia21 Propagation des exceptions méthode iméthode i+1 méthode i+n exception appelsretour d'exception

22 5/03/2004Java12: H.Batatia22 propagation des exceptions Un objet exception est créé par une méthode –soit avec l'instruction throw –soit suite à une erreur sémantique d'évaluation Chaque méthode dans la chaîne des appels doit –soit traiter l'exception éventuelle avec l'instruction try… catch cela détruit l'objet exception –soit faire suivre l'objet exception avec l'instruction throws

23 5/03/2004Java12: H.Batatia23 Conséquence Si votre méthode appelle une méthode qui peut générer (créer ou retransmettre) une exception, elle doit obligatoirement –soit traiter l'exception encadrer l'appel par try/catch –soit la retransmettre mettre throws dans la déclaration de la méthode

24 5/03/2004Java12: H.Batatia24 throws Une méthode qui génère une exception (la crée ou la retransmet) doit déclarer throws exception Cette expression signifie que la méthode retransmet l'exception vers l'appelant Dans le cas de main(), c'est la JVM qui reçoit l'exception –qui arrête le programme et imprime l'état de l'exception

25 5/03/2004Java12: H.Batatia25 attention Les exceptions de RunTimeException ne sont pas obligatoirement déclarées, alors que celles de IOException et AWTException le sont systématiquement Ceci est dû au fait que les exceptions de runtime peuvent survenir dans n'importe quelle partie du programme; l'utilisateur peut s'assurer (par des tests) qu'il ne les rencontre pas Les autres exceptions surviennent à cause d'erreur d'environnement

26 5/03/2004Java12: H.Batatia26 Exercice Ecrire une classe avec une méthode main() –qui crée un tableau de 10 entiers –fait une boucle de lecture de chaîne –tente de convertir la chaîne en entier et le stocker dans le tableau –si la chaîne n'est pas un nombre, la boucle s'arrête –si l'utilisateur donne plus de 10 entiers, la boucle s'arrête –Le programme affiche alors le tableau et sa moyenne Il faut gérer les exceptions de nombre non valide (NumberFormatException), division par zéro (ArithmeticException), et de dépassement de la capacité du tableau (ArrayIndexOutOfBoundsException)

27 5/03/2004Java12: H.Batatia27 Méthodes d'un objet Exception Toute classe exception hérite de la classe Throwable Celle-ci fournit plusieurs méthodes dont : void printStackTrace() –affiche la pile des appels commençant par main et finissant par la méthode qui a généré l'exception String getMessage() –retourne une chaîne contenant le message de l'exception

28 5/03/2004Java12: H.Batatia28 Exemple class AutreException { public static void main (String[] args) { try { int n = Integer.paseInt(args[0]); int m = 1000/n; System.out.println (""+m); } catch (NumberFormatException ne) { System.out.println (args[0] + " : n'est pas un nombre"); System.out.println (ne.getMessage()); ne.printStackTrace(); } catch (ArithmeticException ae) { System.out.println ("Division par zero"); System.out.println (ae.getMessage()); ae.printStackTrace(); } catch (ArrayIndexOutOfBoundsException e) { System.out.println ("Pas d'argument"); System.out.println (e.getMessage()); e.printStackTrace(); } System.out.println ("Fin"); }

29 5/03/2004Java12: H.Batatia29 Finally Si une exception survient le programmeur peut rajouter un bloc finally Celui-ci sera exécuté quelque soit la fin du bloc try –Pas d’exception –Exception traitée par un bloc catch –Exception non traitée par un bloc catch

30 5/03/2004Java12: H.Batatia30 syntaxe try{…} catch (Exception_1 e1) {…} … catch (Exception_n en){…} finally { … }

31 5/03/2004Java12: H.Batatia31 throw throw permet de créer explicitement une exception et la transmettre à l'appelant une méthode qui contient une instruction throw doit être déclarée avec –throws Exception

32 5/03/2004Java12: H.Batatia32 Exemple import es.*; class Adulte { public static void main (String[] args) { Ecran.ecrire("Entrez votre age : "); try{ short age = getAge( ); System.out.println("Vous etes adulte ! Votre age est "+ age + " !!"); } catch (Exception e) { System.out.println("Vous etes mineur!");} } static short getAge () throws Exception { short n = Clavier.lireShort(); if(n<18) { Exception e = new Exception("Age :" + n + " est < 18"); throw e; } else return n; }

33 5/03/2004Java12: H.Batatia33 Créer votre propre Exception class AdulteException extends Exception { private int age; String message; public AdulteException(int n){ age = n; message = "Age " + age + "<18"; } public void printStackTrace() { System.out.println(message); super.printStackTrace(); } public String getMessage(){ return message; }

34 5/03/2004Java12: H.Batatia34 générer une exception import es.*; class AdultePlus { public static void main (String[] args) { Ecran.ecrire("Entrez votre age : "); try{ short age = getAge( ); System.out.println("Vous etes adulte ! Votre age est "+ age + " !!"); } catch (AdulteException e) { System.out.println("Vous etes mineur!");} } static short getAge () throws AdulteException { short n = Clavier.lireShort(); if(n<18) { throw new AdulteException(n); } else return n; }

35 5/03/2004Java12: H.Batatia35 imprimer la trace import java.io.*; import es.*; class AdultePlus { … public static void main (String[] args) { Ecran.ecrire("Entrez votre age : "); try{ short age = mineur( ); System.out.println("Vous etes adulte ! Votre age est "+ age + " !!"); } catch (AdulteException e) { e.printStackTrace(); System.out.println("Vous etes mineur!"); } static short mineur () throws AdulteException { short n = Clavier.lireShort(); if(n<18) { throw new AdulteException(n); } else return n; }

36 5/03/2004Java12: H.Batatia36 Exercice Créer une classe Exception nommée AgeInvalideException Modifier le code de AdultePlus pour lever AgeInvalideException quand l'age est inférieur à zéro.

37 5/03/2004Java12: H.Batatia37 Throwable Une Exception et une Error sont tous deux des objets Throwable Une méthode peut générer (throws) une exception Exception est différente de Error –un programme peut traiter la 1ere mais pas la 2eme Object Throwable ErrorException

38 5/03/2004Java12: H.Batatia38 Erreur Une erreur est un problème plus grave qui survient lors de l'exécution Dans ce cas, la JVM crée un objet de type Error Le programme ne peut pas continuer; il doit s'arrêter java.lang.StackOverflowError est un exemple d'erreur due au débordement de la pile dans les appels récursifs –cette erreur se produira avec l'algorithme de tri rapide pour n assez grand (approchant 10000 sur une machine de 512 MO utilisant java 1.4 sur Win XP)


Télécharger ppt "Java : Exceptions H Batatia. 5/03/2004Java12: H.Batatia2 Exemple 1 public class Bonjour { public static void main(String[] args) { System.out.println("Bonjour."

Présentations similaires


Annonces Google