Le bloc finally est toujours exécuté après la fin du bloc try, que ce dernier se termine normalement ou anormalement en raison d'une exception, euh, d'un élément à lancer.
Si une exception est levée par l'un des codes du bloc try, la méthode en cours relance simplement (ou continue de lancer) la même exception (après avoir exécuté le bloc finally).
Si le bloc final lève une exception/erreur/objet à lancer, et qu'il y a déjà un objet à lancer en attente, cela devient désagréable. Très franchement, j'ai oublié ce qui se passe exactement (tant pis pour ma certification d'il y a des années). I pensez à les deux throwables sont liés ensemble, mais il y a un certain voodoo spécial que vous devez faire (i.e. - un appel de méthode que je devrais chercher) pour obtenir le problème original avant que le "finally" ne vomisse, euh, ne soit rejeté.
Incidemment, try/finally est une chose assez courante à faire pour la gestion des ressources, puisque Java n'a pas de destructeurs.
Par exemple -
r = new LeakyThing();
try { useResource( r); }
finally { r.release(); } // close, destroy, etc
"Enfin", un dernier conseil : si vous faire Il est difficile de mettre un catch, soit un catch spécifique (attendu) des sous-classes de throwable, soit un catch "Throwable", pas "Exception", pour un piège à erreurs général et fourre-tout. Trop de problèmes, tels que les erreurs de réflexion, génèrent des "Erreurs" plutôt que des "Exceptions", et ceux-ci échapperont à tout "catch all" codé en tant que :
catch ( Exception e) ... // doesn't really catch *all*, eh?
faites ceci à la place :
catch ( Throwable t) ...
2 votes
Duplicata possible de Différence entre try-finally et try-catch
25 votes
@mP Tout le monde devrait faire des revues de code et c'est en leur posant des questions qu'on apprend et qu'on s'améliore.