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

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

A RECUPERER EN ENTRANT Le polycopié de Caml Partie 1
Formation universitaire à .NET: Introduction à C#
Sérialisation des objets
Spécialisation/généralisation Héritage Polymorphisme
Le mécanisme des exceptions
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
gestion des exceptions
TP 7.1 synchronized et join Écrire un programme Java qui crée 1000 threads et maintient un compteur nb du nombre de threads créés jusque-là. Le thread.
(Classes prédéfinies – API Java)
Les technologies XML Cours 3 : Les APIS XML Janvier Version 1.0 -
C.
Programmer en JAVA par Tama
JAV - TD 6 Structures de données JAVA
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
FLSI602 Génie Informatique et Réseaux
1 Le mécanisme des exceptions Qu'est-ce qu'une exception? Comment définir et signaler des exceptions? Comment récupérer des exceptions?
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
Traitement des erreurs en Java
1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif.
Principes de programmation (suite)
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Récursivité.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Les exceptions. Quest ce quune exception ? Une erreur dans le programme Due à un bug ou un cas « anormal » Gestion complète en java : JVM Dans dautre.
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Méthodes génériques 4. Types paramètres.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Classes abstraites et Interfaces
Introduction à la programmation (Java)
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Test et débogage Tests unitaires. Gestion d’erreurs. Notion d’état, de pré-condition et de post-condition. Assertion. Traces de programme. Débogueur et.
Une nouvelle structure de données : les tableaux
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Gestion et levée dexception. Une exception est un message envoyé par une méthode à une autre méthode. La méthode qui la reçoit a le choix de soccuper.
IFT 6800 Atelier en Technologies d’information
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Cours 8 (18 novembre 2011) exceptions. héritagePOO-L3 H. Fauconnier2 Tableau et héritage Y[] yA=new Y[3]; X[] xA=yA; //ok xA[0]=new Y(); xA[1]=new X();
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI1502 Principes fondamentaux en conception des logiciels
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 6. Gestion des erreurs et des exceptions : Fonctionnement.
Une introduction à Java
Les méthodes en java • Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. • Une méthode pour être utilisée.
1111 Gestion des exceptions Objectifs À la fin de ce cours, vous serez capables de : • Expliquer les concepts de base de la gestion des exceptions.
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
Cours 9 Exceptions (fin) Généricité. POO-L3 H. Fauconnier2 Chaînage d'exceptions  Une exception peut être causée par une autre.  il peut être utile.
GESTION ET TRAITEMENT DES ERREURS
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
Cours 7 Classes locales Clonage Divers: tableaux.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 6 – Exceptions.
Un survol du language C.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Tutorat en bio-informatique
12/04/ Les exceptions Cours 11 Cours 11.
Entrées / Sorties.
Constructeurs H Batatia. Variable statique Une variable statique est partagée par tous les objets d’une classe.
Strings et Tableaux en Java
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Cours du 5 novembre.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
6ième Classe (Mercredi, 17 novembre) CSI2572
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 2 – Java Premiers pas Master 1 SIGLIS1 Java Lecteur - Chapitre 2 - Java Premiers Pas.
Traitement des erreurs en Java: les exceptions
Exception Handling "Unfortunately, it's almost accepted practice to ignore error conditions, as if we're in a state of denial about errors." Bruce Eckel.
Philippe Gandy – 10 novembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Transcription de la présentation:

Java : Exceptions H Batatia

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

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

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/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

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

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()

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?

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)

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

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

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

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"); }

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); }

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

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

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…

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"); }

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"); }

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

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

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

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

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

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

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)

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

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"); }

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

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

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

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; }

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; }

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; }

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; }

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.

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

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 sur une machine de 512 MO utilisant java 1.4 sur Win XP)