gestion des exceptions

Slides:



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

Premier programme en C :
Chapitre annexe. Récursivité
Formation universitaire à .NET: Introduction à C#
Le mécanisme des exceptions
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.
(Classes prédéfinies – API Java)
C.
Le publipostage La fonction de fusion permet de créer des documents identiques dans les grandes lignes que l’on personnalise automatiquement à chaque destinataires.
Programmer en JAVA par Tama
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
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?
La fonction Style Permet de créer des types de texte, par exemple
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
12 novembre 2012 Grégory Petit
Traitement des erreurs en Java
Javascript les spécificités du langage - Partie 7 -
Le virus constructeur d‘Amour
LOGICIEL DE L'AMOUR!.
Principes de programmation (suite)
Tableau de bord des devis
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Récursivité.
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
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.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Classes abstraites et Interfaces
Introduction à la programmation (Java)
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Introduction à la programmation objet Langage Java
Introduction au paradigme orienté-objet (suite)
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 :
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 6. Gestion des erreurs et des exceptions : Fonctionnement.
Plan troisième cours Instruction sélective Instruction répétitive
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
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.
La notion de type revisitée en POO
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
Java : Exceptions H Batatia. 5/03/2004Java12: H.Batatia2 Exemple 1 public class Bonjour { public static void main(String[] args) { System.out.println("Bonjour.
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 6 – Exceptions.
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.
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
Cours LCS N°4 Présenté par Mr: LALLALI
Cours du 5 novembre.
Tutorat en bio-informatique Le 12 octobre Exercices 3 et 4 (MAT1400) - solutions La série du binôme (chap. 8.8) –Trouver la série entière et le.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
6ième Classe (Mercredi, 17 novembre) CSI2572
En route vers le déploiement . . .
Héritage Conception par Objet et programmation Java
Traitement des erreurs en Java: les exceptions
Master 1 SIGLIS Java Lecteur Stéphane Tallard Correction du TD Chapitre 3.
Philippe Gandy – 10 novembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Java Réalisé par: Mouna POKORA. PLAN: Définition : Historique: Caractéristiques: un langage orienté objet: un langage interprété : un langage portable:
Transcription de la présentation:

gestion des exceptions

Par: Manaf hamza Bassir said Bouchkri abd ellah Prof: Rahmouni ossama

Introduction Définition des exceptions Les mots clés try, catch et finally Quelques exceptions prédéfinies en Java Arbre des exceptions Astuce d'Eclipse Des exercices

1_Introduction Tout programme comporte des erreurs, même si celui-ci semble fonctionner à merveille. Chaque programmeur essaye de réduire au minimum le nombre d'erreurs, mais toutes les erreurs ne peuvent pas forcément être prévues.

Les erreurs syntaxiques sont la plupart interceptées lors de la compilation, mais il reste souvent des erreurs "imprévisibles". Ces erreurs se produisent généralement de façon exceptionnelle, c'est-à-dire suite à une action de l'utilisateur, ou de l'environnement

2_Définition des exceptions Les exceptions représentent le mécanisme de gestion des erreurs intégré au langage Java. Il se compose d'objets représentant les erreurs et d'un ensemble de trois mots clés qui permettent de détecter et de traiter ces erreurs ( try, catch et finally ) et de les lever ou les propager (throw et throws).

Lors de la détection d'une erreur, un objet qui hérite de la classe Exception est créé (on dit qu'une exception est levée) et propagé à travers la pile d'exécution jusqu'à ce qu'il soit traité. Ces mécanismes permettent de renforcer la sécurité du code Java.

Exemple : public class Test Exception { public static void main(java.lang.String[] args) { int j = 20, i = 0; System.out.println(j/i); System.out.println("coucou toi !"); }}

Résultat: Vous devriez avoir un message d'erreur Java (en rouge) comme celui-ci :

3 Les mots clés try, catch et finally Le bloc try est exécuté jusqu'à ce qu'il se termine avec succès ou bien qu'une exception soit levée. Dans ce dernier cas, les clauses catch sont examinées l'une après l'autre dans le but d'en trouver une qui traite cette classe d'exceptions (ou une superclasse). Les clauses catch doivent donc traiter les exceptions de la plus spécifique à la plus générale. Si une clause catch convenant à cette exception a été trouvée et le bloc exécuté, l'exécution du programme reprend son cours.

Bloc finally Un bloc finally permet au programmeur de définir un ensemble d'instructions qui est toujours exécuté, que l'exception soit levée ou non, capturée ou non. La seule instruction qui peut faire qu'un bloc finally ne soit pas exécuté est System.exit().

try / catch / finally try { ... } catch (<une-exception>) catch (<une_autre_exception>) finally Autant de blocs catch que l'on veut. Bloc finally facultatif.

Ce que je vous propose maintenant, c'est de capturer l'exception de division par zéro, et d'afficher un message personnalisé. Pour ce faire, tapez le code suivant dans votre main :

public class Test { public static void main(String[] args) { int j = 20, i = 0; try { System.out.println(j/i); } catch (ArithmeticException e) { // TODO Auto-generated catch block System.out.println("Division par zéro !"); System.out.println("coucou toi !"); }

Si vous exécutez ce code, vous devez avoir :

4_Quelques exceptions prédéfinies en Java Division par zéro pour les entiers : ArithmeticException Référence nulle : NullPointerException Tentative de forçage de type illégale : ClassCastException Tentative de création d'un tableau de taille négative : NegativeArraySizeException Dépassement de limite d'un tableau : ArrayIndexOutOfBoundsException

5_Les exceptions personnalisées À partir de maintenant, nous allons nous servir à nouveau de notre projet Ville (celui que vous avez utilisé dans les premiers chapitres...). Nous allons perfectionner un peu la gestion de nos objets Ville et Capitale... Comment ? Eh bien je vois bien une exception qui pourrait être créée... Et je suis sûr que certains petits malins se sont déjà amusés à créer des villes ou des capitales avec un nombres d'habitants négatif....

Je vous propose simplement de mettre en oeuvre une exception de notre cru, ceci afin de pouvoir interdire l'instanciation d'objet Ville ou Capitale ayant un nombre négatif d'habitants. La procédure pour faire ce tour de force est un peu particulière :

Nous devons créer une classe héritée de la classe Exception : appelons-la NombreHabitantException. Par convention, les exceptions ont un nom se terminant par Exception. Nous devons renvoyer l'exception levée à notre classe NombreHabitantException. Ensuite, gérer celle-ci dans notre classe NombreHabitantException

Le premier mot clé throws Ce mot clé permet de dire à une instruction Java (condition, déclaration de variable...) ou à une classe entière qu'une exception potentielle sera gérée par une classe -souvent une classe personnalisée- mais ce peut être la classe Exception elle-même. Ce mot clé est suivi du nom de la classe qui va gérer l'exception. Ceci a pour but de définir le type d'exception qui risque d'être générée par l'instruction, ou la classe qui précède le mot clé throws.

Le deuxième mot clé throw Celui-ci permet d'instancier un objet dans la classe suivant l'instruction throws. Cette instruction est suivie du mot clé new ainsi que d'un objet cité avec throws. En fait, il lance une exception, tout simplement.

Pour pouvoir mettre en pratique ce système, nous devons commencer par créer une classe qui va gérer nos exceptions. Celle-ci, je vous le rappelle, doit être héritée d'Exception. Pour commencer, inutile de créer un constructeur, ce qui nous donnerait une classe Erreur, héritée de Exception, vide. Comme ceci :

class NombreHabitantException extends Exception{ public NombreHabitantException(){ System.out.println("Vous essayez d'instancier une classe Ville avec un nombre d'habitants négatif !"); }

Ceci signifie qu'à partir de maintenant, dû aux changements dans le constructeur, vous devrez gérer les exceptions possibles sur cette instruction. Avec un bloc try{} catch{}. On dit aussi que votre constructeur est devenu une méthode à risque, et vous avez laissé le soin au développeur de gérer l'exception potentielle !

Donc, pour que l'erreur disparaisse, il nous faut entourer notre instanciation avec un bloc try{...}catch{...}. Comme ceci :

Mais si nous déclarons une Ville avec un nombre d'habitants négatif pour tester notre exception ? Avec ce code, par exemple

Ce qui signifie que si notre instanciation a échoué dans notre bloc try{}, le programme plantera ! Comment empêcher cela, alors ? Vous allez voir, c'est très simple. Il suffit d'instancier un objet Ville par défaut dans notre bloc catch{}. Grâce à cela, si notre instanciation avec valeur échoue, on fait une instanciation par défaut qui, elle, n'est pas une méthode à risque ! Voyez plutôt :

Il vous suffit maintenant de définir cette construction de notre objet hérité d'Exception dans votre classe Ville. Comme ça :

public Ville(String pNom, int pNbre, String pPays)throw NombreHabitantException { if(pNbre < 0) throw new NombreHabitantException(pNbre); // on appelle le nouveau constructeur else { nbreInstance++; nbreInstanceBis++; nomVille = pNom; nomPays = pPays; nbreHabitant = pNbre; this.setCategorie(); } }

Et si vous exécutez le même code que précédemment, vous obtiendrez ceci :

6_Arbre des exceptions Throwable Exception Error OutOfMemoryError String (message d'erreur) Exception Error OutOfMemoryError Les erreurs sont graves et il est recommandé de ne pas les corriger. RunTimeException NullPointerException ClassCastException ... VosExceptions... exceptions prédéfinies

7_Astuce d'Eclipse chose. Il y a plusieurs manières de procéder, mais toutes font la même chose. L'astuce ici réside dans le fait de générer les blocs try{} catch{} automatiquement. Bien sûr, il faut que les clauses de déclenchement soient définies au préalable !

Si vous reprenez le code de votre méthode main, si vous effacez le contenu et ajoutez une instanciation de l'objet Ville sans les clauses try{} catch{}, vous avez l'erreur persistante dont je vous parlais au début du chapitre. Si vous cliquez sur la croix rouge, située à gauche de votre zone de saisie, vous obtenez ceci :

Choisissez l'option Surround with try/catch et vous avez votre code, tout beau tout propre ! La deuxième méthode consiste à sélectionner votre (ou vos) ligne(s) de code à risque et de faire : Source / Surround with / try/catch block ou d'utiliser le raccourci clavier Shift + Alt + Z : Voici l'image en utilisant le menu :

Voici l'image en utilisant le raccourci clavier :

Exercice 1- Division par zéro 1- Écrire un programme qui effectue une division par zéro et ne contient aucun traitement d'exception. Que se passe-t-il? Pourquoi? Quel est le type de l'exception générée. 2- Cette fois, ré-écrire le programme pour capturer l'exception. 3- Le modifier pour afficher un message d'erreur explicite. 4- Cette fois, le programme corrige lui même et remplace la division par zéro par une division par 1. Remarquons ainsi que lever une exception ne signifie forcement l'affichage d'un message d'erreur suivi de l'arrêt du programme mais qu'il peut y avoir poursuite normale de l'exécution

Exercice 2- Saisie d'un mot de passe Dans les failles de sécurité réseau, on trouve très souvent les problèmes de dépassement. Par exemple, sur certaines anciennes versions de telnet, un login ou un mot de passe de plus d'un mega-octet faisait "planter" le programme et on obtenait alors un accès root au système. Ce programme va gérer ce type de problème en séparant les exceptions pour une meilleure gestion. 1- Écrire un programme stand-alone qui demande en boucle un nom d'utilisateur (login) et un mot de passe (pwd) jusqu'à recevoir un login/pwd correct.