Exercice java traite le sujet suivant:
Redéclenchement et finally
Examinons ce petit Exercice java:
Quels résultats fournit ce programme ?
class Except extends Exception {}
public class FinReth
{ public static void f(int n) throws Except
{ try
{ if (n!=1) throw new Except () ;
}
catch (Except e)
{ System.out.println ("catch dans f - n = " + n) ;
throw e ;
}
finally
{ System.out.println ("dans finally de f - n = " + n) ;
}
}
public static void main (String args[])
{ int n=0 ;
try
{ for (n=1 ; n<5 ; n++) f(n) ;
}
catch (Except e)
{ System.out.println ("catch dans main - n = " + n) ;
}
finally
{ System.out.println ("dans finally de main - n = " + n) ;
}
}
}
La boucle for de la méthode main effectue théoriquement cinq appels de f. Le premier (n=1) ne provoque aucune exception dans f, et il conduit à l’exécution du bloc finally associé au bloc try de f. Le deuxième (n=2) provoque une exception dans f qui est traitée par le bloc catch correspondant, lequel relance à nouveau une exception ; avant qu’on ne lui cherche un gestionnaire, on exécute le bloc finally associé au bloc try. Puis on cherche un gestionnaire approprié dans un bloc try englobant, c’est-à-dire ici celui du main. On exécute donc le bloc catch correspondant, puis le bloc finally associé. Comme cette exception met fin à l’exécution du bloc try de main, le programme s’interrompt.
En définitive, on obtient ces résultats :
dans finally de f - n = 1 catch dans f - n = 2 dans finally de f - n = 2 catch dans main - n = 2 dans finally de main - n = 2
Termes de recherche utilisés:
- programmation exercice corrigé
