Vous êtes sur la page 1sur 6

POO LES EXCEPTIONS

CHAPITRE 7 :

LES EXCEPTIONS
Objectifs spcifiques 1. 2. Introduire la notion dexception, les rgles dutilisation et de dfinition des exceptions. Distinguer entre les exceptions prdfinies et les exceptions dfinies par lutilisateur.

Elments de contenu I. Dfinition II. Les exceptions prdfinies III. Les exceptions dfinies par lutilisateur IV. Exemple Volume Horaire : Cours : 1 heure 30 Travaux Dirigs : 1 heure

7.1 Dfinitions
La notion dexception est offerte aux programmeurs Java pour rsoudre de manire efficace et simple le problme de la gestion des erreurs mises lors de lexcution dun programme. Une exception est un signal qui indique quun vnement anormal est survenu dans un programme - La rcupration (le traitement) de lexception permet au programme de continuer son excution. - Une exception est un signal dclench par une instruction et trait par une autre Il faut quun objet soit capable de signaler ou lever (throw) une exception un autre objet Il faut que lautre objet puisse saisir (catch) une exception afin de la traiter Lorsque lexception se produit le contrle est transfr un gestionnaire dexceptions - Sparation de lexcution normale de lexcution en cas de condition anormale

Exemple
Tester cet exemple en modifiant la valeur de j par 0 public class TestException { public static void main(java.lang.String[] args) { int i = 3; int j = 1;

Mlle I.SGHAIER

65

POO LES EXCEPTIONS

try { System.out.println("rsultat = " + (i / j)); } catch (ArithmeticException e) { System.out.println("erreur division par zro"); } } } Une mthode qui dsire grer ce genre de problmes peut indiquer quelle est dispose intercepter lexception (instruction throws).

7.2 Les exceptions prdfinies


En Java, les exceptions sont de vritables objets. Ce sont des instances de classes qui hritent de la classe Throwable. Lorsquune exception est leve, une instance de la classe Throwable est cre.Voici un aperu de la hirarchie des classes pour les exceptions.

Erreurs et Exceptions Erreur: indications de problmes irrcuprables dus au matriel ou au systme dexploitation Exception: erreurs rsiduelles dans le programme qui peuvent tre traites par une sortie propre ou une rcupration (arithmtique, pointeurs, index, i/o, etc.)

Mlle I.SGHAIER

66

POO LES EXCEPTIONS

- Les instances de la classe Error sont des erreurs internes la machine virtuelle Java. Elles sont rares et fatales. - Les sous-classes de la classe Exception sont rparties en deux catgories : - Les exceptions dexcution (runtime) sont souvent leffet du manque de robustesse du code. Par exemple lexception NullPointerException est leve lorsque lon manipule un objet non instanci (oubli de linstruction new) ; - Les autres exceptions correspondent des vnements anormaux chappant au contrle du programme. Par exemple, lexception EOFException est leve si on essaie de lire au-del dun fichier. Traiter les exceptions leves : les mots cls try, catch et finally :

Intercepter une exception : le mot cl throws : Si une mthode est susceptible de lever une exception et si elle ne peut pas la traiter, elle se doit de prvenir le systme qu'elle relaye cette tche. Pour ce faire, on utilise le mot cl throws dans la dfinition de la mthode. Ce mot cl permet d'avertir le systme qu'une certaine catgorie d'exception ne sera pas traite en local (dans l'exemple suivant, l'ensemble des exceptions lies aux entres/sorties). public void ma_methode (int x) throws IOEXception { } Il est galement possible de dsigner linterception de plusieurs exceptions : public void ma_methode (int x) throws IOException, EOFException{ }

7.3 Les Exceptions dfinies par lutilisateur


Jusqu prsent on parl des exceptions prdfinies qui se dclenchent toutes seules. Java offre au programmeur la possibilit de dfinir ses propres exceptions. Ces exceptions doivent hriter dune autre exception de la hirarchie des classes Java. Le programmeur doit lui-mme lever ses exceptions.

Mlle I.SGHAIER

67

POO LES EXCEPTIONS

Pour se faire Java met sa disposition le mot-cl throw ( ne pas confondre avec throws). Pour le reste (try, catch, finally) le mcanisme est identique.

7.4 Exemple
Voici un exemple avanc ralis par lditeur Jbuilder, cest en fait une interface utilisateur qui permet linsertion dune date, en faisant les contrles ncessaires pour afficher lintitul du jour.

Mlle I.SGHAIER

68

POO LES EXCEPTIONS

Appel lexception public static void controlmois(int jour,int mois) throws SaisieDateException { if (mois<1||mois>12) { throw new SaisieDateException("Mois invalid."); } else{ if((mois==4||mois==6||mois==9||mois==11)&&(jour==31)){ throw new SaisieDateException("le jour du mois est invalid."); } else if(mois==2&&(jour==31||jour==30)){ throw new SaisieDateException("le jour du mois est invalid."); } } Dclaration de lexception public class SaisieDateException extends Exception { public SaisieDateException(String s) { super(s); } Exercice

Mlle I.SGHAIER

69

POO LES EXCEPTIONS

Ecrire une mthode lireNombre() demandant un nombre lutilisateur, le lisant sous forme de chane de caractre et le transformant ensuite en entier. La mthode doit recommander un nombre tant que lentre est invalide. NB : Les exceptions susceptibles dtre renvoyes par readline() est IOException et par parseInt() est NumberFormatException

Solution :
import java.io.*; public class Clavier { //Mthode qui permet de lire une chaine de caractres public static String lireString () {String ligne_lue = null; try {InputStreamReader lecteur = new InputStreamReader(System.in); BufferedReader entree = new BufferedReader(lecteur); ligne_lue = entree.readLine(); } catch(IOException err) {System.exit(0); } return ligne_lue;} //Mthode qui permet de lire un entier public static int lireInt() {int x=0; try {String ligne_lue = lireString(); x=Integer.parseInt(ligne_lue); } catch (NumberFormatException err) {System.out.println ("***Erreur de donnes***"); System.exit(0); } return x; } } public class test { public static void main(String[] argv) { int x= clavier.lireInt(); System.out.println(">>>>>> "+ x); } }

Mlle I.SGHAIER

70