Exercice Java : Bloc finally

Exercice java traite le  sujet suivant:

Bloc finally

Nous avons vu que le déclenchement d’une exception provoque un branchement inconditionnel au gestionnaire, à  quelque niveau qu’il se trouve.
L’exécution se poursuit avec les instructions suivant ce gestionnaire. Cependant, Java permet d’introduire, à la suite  d’un bloc try, un bloc particulier d’instructions qui seront toujours exécutées:

  • soit après la fin “naturelle” du bloc try, si aucune exception n’a été déclenchée (il peut s’agir d’une instruction de  branchement inconditionnel telle que break ou continue),
  • soit après le gestionnaire d’exception (à condition, bien sûr, que ce dernier n’ait pas provoqué d’arrêt de l’exécution).

Ce bloc est introduit par le mot-clé finally et doit obligatoirement être placé après le dernier gestionnaire.
Bien entendu, cette possibilité n’a aucun intérêt lorsque les exceptions sont traitées localement.

Examinons ce petit Exercice java:



Quels résultats fournit ce programme ?

class Except extends Exception
{}
public class Finally
{ public static void f(int n)
{ try
{ if (n!=1) throw new Except () ;
}

catch (Except e)
{ System.out.println ("catch dans f - n = " + n) ;
return ;
}
finally
{ System.out.println ("dans finally - n = " + n) ;
}
}
public static void main (String args[])
{ f(1) ;
f(2) ;
}
}

Les instructions d’un floc finally associé à un bloc try sont toujours exécutées qu’il y ait eu ou non déclenchement d’une exception (sauf si le gestionnaire met fin à l’exécution). Ceci s’applique notamment au cas où un gestionnaire comporte une instruction return : le bloc finally est quand même exécuté auparavant.
En définitive, le programme fournit ceci :

dans finally - n = 1
catch dans f - n = 2
dans finally - n = 2

Leave a Reply

Your email address will not be published. Required fields are marked *


*