Académique Documents
Professionnel Documents
Culture Documents
Chapitre Exceptions
Chapitre Exceptions
Les exceptions reprsentent le mcanisme de gestion des erreurs intgr au langage Java. Il se compose d'objets reprsentant les erreurs et d'un ensemble de trois mots cls qui permettent de dtecter et de traiter ces erreurs ( try, catch et finally ) et de les lever ou les propager (throw et throws).
Lors de la dtection d'une erreur, un objet qui hrite de la classe Exception est cr (on dit qu'une exception est leve) et propag travers la pile d'excution jusqu' ce qu'il soit trait. Si une exception remonte jusqu la mthode main() sans tre traite, la JVM
stoppe lexcution du programme
affiche un message derreur, avec une description de la pile des mthodes traverses par lexception
Rsultat :
Si dans un bloc de code on fait appel une mthode qui peut potentiellement gnrer une exception, on doit :
soit essayer de la rcuprer avec try/catch, soit ajouter le mot cl throws dans la dclaration du bloc. !!! Sinon erreur la compilation !!!.
inconvnient :
nombreuses mthodes des packages java indiquent dans leur dclaration qu'elles peuvent lever une exception.
Cependant ceci garantie que certaines exceptions critiques seront prises explicitement en compte par le programmeur.
Le bloc try rassemble les appels de mthodes susceptibles de produire des erreurs ou des exceptions.
operation_risque1;
try {
opration_risque2;
} catch (ExceptionInteressante e) { traitements }
catch (ExceptionParticulire e) {
catch (Exception e) {
traitements }
traitements }
finally {
traitement_pour_terminer_proprement; }
8
Toute exception leve dans le bloc try est abandonne au premier bloc catch qui la traite. S'il y a plusieurs types d'erreurs et d'exceptions intercepter, il faut dfinir autant de bloc catch que de type d'vnement. !!!ordre important des clauses catch!!! traiter en premier les exceptions les plus prcises (sous classes) avant les exceptions plus gnrales.
Sinon erreur de compilation (catch not reached).9
Si l'exception n'est pas trait par un bloc catch, elle sera transmise au bloc de niveau suprieur. Si l'on ne se trouve pas dans un autre bloc try, on quitte la mthode en cours, qui rgnre son tour une exception dans la mthode appelante.
La clause finally dfinit un bloc qui sera toujours excut, qu'une exception soit leve ou non. Ce bloc est facultatif. Il est aussi excut si dans le bloc try il y a une instruction break ou continue.
10
Fixer le problme et ressayer le traitement qui a provoqu le passage au bloc catch Faire un traitement alternatif
Retourner (return) une valeur particulire Sortir de lapplication avec System.exit()
Faire un traitement partiel du problme et relancer (throw) la mme exception (ou une autre exception) 11
La classe Throwable
Mthodes de la classe :
String getMessage( ) lecture du message void printStackTrace( ) affiche l'exception et l'tat de la pile d'excution au moment de son appel
12
Exemple
public class TestException {
public static void main(java.lang.String[] args) {
try { System.out.println("rsultat = " + (i / j)); } printStackTrace java.lang.ArithmeticException: / by zero catch (ArithmeticException e) { at System.out.println("getmessage"); tests.TestException.main(TestException.java:2 System.out.println(e.getMessage()); 4) System.out.println(" ");
System.out.println("toString");
System.out.println(e.toString()); System.out.println(" "); System.out.println("printStackTrace"); e.printStackTrace();
}}
}
13
Hirarchie dexceptions
Throwable
Error
Exception
Erreur grave
RuntimeException
Exceptions contrles
14
Hirarchie dexceptions
NullPointerException IndexOutOfBoundsException et sa sous-classe ArrayIndexOutOfBoundsException ArithmeticException IllegalArgumentException et sa sous-classe NumberFormatException ClassCastException NoSuchElementException
16
Java n'oblige la dclaration des exceptions dans l'en tte de la mthode que pour les exceptions dites contrles (checked). Les exceptions non contrles (unchecked) peuvent tre captures mais n'ont pas tre dclares.
Les exceptions et erreurs qui hritent de RunTimeException et de Error sont non contrles. Toutes les autres exceptions sont contrles.
17
Pour gnrer une exception, il suffit d'utiliser le mot cl throw, suivi d'un objet dont la classe drive de Throwable. Si l'on veut gnrer une exception dans une mthode avec throw, il faut l'indiquer dans la dclaration de la mthode, en utilisant le mot cl throws. En cas de ncessit, on peut crer ses propres exceptions.
Sous classe de Exception ou RuntimeException
18
public void setSolde(double solde) { if (solde>= 0) this.solde = solde; else throw new IllegalArgumentException("Solde ngatif !");
} . . .
Faite de mme dans le constructeur de la classe compte pour ne pas dpasser le nombre max de compte
19
super();
} public SaisieErroneeException(String s) { super(s); }
20
Exemple 2 (suite)
public class TestSaisieErroneeException {
public static void controle(String chaine) throws SaisieErroneeException { if (chaine.equals("") == true) throw new SaisieErroneeException("Saisie erronee : chaine vide"); } public static void main(java.lang.String[] args) { String chaine1 = "bonjour"; String chaine2 = ""; try { controle(chaine1); } catch (SaisieErroneeException e) { System.out.println("Chaine1 saisie erronee"); }; try { controle(chaine2); } catch (SaisieErroneeEx ception e) { System.out.println("Chaine2 saisie erronee"); }; }}
21
Les mthodes pouvant lever des exceptions doivent inclure une clause throws nom_exception dans leur en tte.
prciser au compilateur que cette mthode pourra lever cette exception et que toute mthode qui l'appelle devra prendre en compte cette exception (traitement ou propagation).
22