précédent | suivant | table des matières s'évaluer

Exceptions

Sommaire
  1. Définitions
  2. Traitement d'une exception
  3. Hierarchie des exceptions
  4. Classe Throwable

1 Définitions

Levée d’exception Surveillance et traitement d’exception
  • throw : une exception est levée lorsqu’une situation exceptionnelle se produit.
  • try : un bloc d’instructions est susceptible de provoquer une situation exceptionnelle, c'est-à-dire une levée d’exception : il est surveillé.
  • catch : une exception levée dans un bloc surveillé peut être capturée et traitée.

Exemple : 

for( int i = 0; ;++i) System.out.println(t[i]);

    est une séquence d’instructions qui va lever une exception de type ArrayIndexOutOfBoundsException lorsque i va être égal à t.length.

On peut donc surveiller cette instruction et capturée l’exception qui est levée pour la traiter : 

try{
   for( int i = 0; ; ++i) System.out.println(t[i]);
}catch( IndexOutOfBoundsException iobe){
   // traitement de l’exception
}

Les intructions surveillées par un bloc try peuvent lever plusieurs types d’exceptions et donc le bloc try peut être suivi de plusieurs catch, et éventuellement d’un finally. Lorsque une exception est levée, les catch sont parcourus en séquence et le premier qui capture l’exception du type de celle qui a été levée, est celui qui traite l’exception. S’il y a un bloc finally, il est exécuté après toutes les instructions du bloc try, ou après la dernière instruction qui a traité une exception levée dans le bloc try.

Une méthode qui :

void methode(…) throws E1, E2{
   // du code qui peut lever
   // des exceptions de la classe E1 ou E2
   // sans les capturer
}

2 Traitement d’une exception

try{
      I1 ;
      I2 ;
      I3 ;
}catch(Exception1 e1){
   T11;
}catch(Exception2 e2){
   T21; 
   T22; 
}catch(Exception3 e3){
   . . . 
}finally{
   F; 
}

InstructionSuivantes ;




Si Exception2 dérive de Exception1 le catch de Exception2 doit se trouver avant le catch de Exception1.





La clause finally est toujours exécutée, qu'il y ait eu une levée d'exception ou non. Elle est aussi exécutée si un catch ou le bloc try se termine par un return, un break ou un continue.

Pour intercepter toutes les exceptions, il suffit d’écrire catch(Throwable t){ . . . }.

Déroulement d'une exécution normale et d'une exécution avec levée d'exception :

déroulement d'exécution

3 Hiérarchie des exceptions

Organigramme hiérarchique

La liste des Error existantes, la liste des Exceptions existantes, et la liste des exceptions Runtime existantes.

4 La classe Throwable

La classe Throwable est la classe mère de toutes les exceptions et erreurs : seules des instances de Throwable ou de ses classes dérivées peuvent être levée par l’instruction throw ou être argument d’un catch.

Une instance de Throwable peut avoir une cause : une autre instance de Throwable qui est à l'origine de la création de cette instance («chaînage des exceptions»).

La classe Throwable a un constructeur par défaut et un constructeur qui a en argument une chaîne de caractères : le « message » de l’exception.

Throwable() 
Le constructeur par défaut.
Throwable(String message)
Le constructeur avec un paramètre, le message de l'exception.
Throwable(Throwable cause) 
Le constructeur avec une cause en paramètre.
Throwable(String message, Throwable cause)
Le constructeur avec un message et une cause.

Throwable fillInStackTrace()
StackTraceElement[]getStackTrace()
Retourne un tableau représentant l'état de la pile, au moment où a été levée l'exception. Un élément de stack, contient les informations suivantes :
  • le nom de la méthode
  • le numéro de ligne où a été levée l'exception
  • le nom de la classe
  • le nom du fichier
Throwable initCause(Throwable t)
Initialise la cause de cette instance de Throwable avec t.
Cette méthode ne peut être appelée qu'une seule fois, sauf si le Throwable a déjà été créé avec une cause, auquel cas elle ne peut pas être appelée.
La méthode retourne une référence à l'objet pour lequel elle a été appelée.
La méthode lève une exception :
  • IllegalArgumentException si la cause du Throwable est this.
  • IllegalStateException si la cause a déjà été créée.
String getLocalizedMessage()
Si la méthode n’est pas redéfinie, identique à getMessage().
String getMessage()
Retourne le message
void printStackTrace()
Imprime le contenu de la pile dans le fichier d’erreur err
void printStackTrace (PrintStream s)
Imprime le contenu de la pile dans s

void printStackTrace(PrintWriter s) 
Imprime le contenu de la pile dans s
String toString()

Une Error est une exception qui indique des problèmes graves : une application ne résout pas ce genre de problème. Une méthode n’a pas à déclarer dans sa clause throws les Error qui ne seraient pas capturées.

Une Exception en revanche peut être capturée et traitée par l’application, ou apparaître dans la liste des exceptions levées par la méthode.


haut de la page