Exercice java traite le sujet suivant:
Redéclenchement d’une exception et choix du gestionnaire
Dans un gestionnaire d’exception, il est possible de demander que, malgré son traitement, l’exception soit retransmise à un niveau englobant, comme si elle n’avait pas été traitée. Il suffit pour cela de la relancer en appelant à nouveau l’instruction throw :
Examinons ce petit Exercice java:
Que fournit ce programme ?
class Erreur extends Exception {}
class Erreur1 extends Erreur {}
class Erreur2 extends Erreur {}
class A
{ public A(int n) throws Erreur
{ try
{ if (n==1) throw new Erreur1() ;
if (n==2) throw new Erreur2() ;
if (n==3) throw new Erreur() ;
}
catch (Erreur1 e)
{ System.out.println ("** Exception Erreur1 dans constructeur A") ;
}
catch (Erreur e)
{ System.out.println ("** Exception Erreur dans constructeur A") ;
throw (e) ;
}
}
}
public class Redecl
{ public static void main (String args[])
{ int n ;
for (n=1 ; n<=3 ; n++)
{ try
{ A a = new A(n) ;
}
catch (Erreur1 e)
{ System.out.println ("*** Exception Erreur1 dans main") ;
}
catch (Erreur2 e)
{ System.out.println ("*** Exception Erreur2 dans main") ;
}
catch (Erreur e)
{ System.out.println ("*** Exception Erreur dans main") ;
}
System.out.println ("--------------") ;
}
System.out.println ("fin main") ;
}
}
Ici, on exécute à trois reprises le même bloc try, n prenant successivement les valeurs 1, 2 et 3.
Dans le premier cas (n=1), la construction de l’objet a déclenche une erreur Erreur1 qui se trouve traitée par le gestionnaire correspondant (catch(Erreur1 e) du constructeur de A.
Dans le second cas (n=2), la construction de a déclenche une erreur Erreur2. Elle est alors traitée par le gestionnaire relatif au type Erreur du constructeur de A (il s’agit du premier des gestionnaires ayant un type compatible avec Erreur2). Mais celui-ci redéclenche à son tour une exception de même type Erreur2 ; transmise au bloc try englogant, elle est traitée par le gestionnaire catch(Erreur2). Enfin, dans le dernier cas (n=3), la construction de a déclenche une erreur Erreur qui se trouve traitée par le gestionnaire correspondant du constructeur de A lequel, là encore, redéclenche à son tour une exception de même type ; transmise au bloc try englobant, elle sera traitée par le gestionnaire catch(Erreur).
En définitive, le programme fournit ces résultats :
** Exception Erreur1 dans constructeur A -------------** Exception Erreur dans constructeur A *** Exception Erreur2 dans main -------------** Exception Erreur dans constructeur A *** Exception Erreur dans main -------------fin main
Remarque : Notez bien qu’ici le type de l’exception redéclenchée par le second gestionnaire du constructeur de A (instruction throw e) est identique à celui reçu en argument. Il peut varier d’un appel à un autre. Ici, il s’agit soit de Erreur2, soit de Erreur.
Termes de recherche utilisés:
- exception erreur 1 dans constructeur a
- exceptions dans constructeur java
- java erreur dans constructeur
- td sur gestion d\exception java
