Qu'est-ce que « l'achèvement Abrupt d'une clause finally »?
Question
Selon le Java Language Specification :
S'il y a des instructions try encaissantes dont les blocs essayez contenir l'instruction throw, puis enfin les clauses de ceux qui essaient instructions sont exécutées que le contrôle est transféré vers l'extérieur, jusqu'à ce que la valeur projetée est prise. Notez que l'achèvement brusque d'une clause finally peut perturber le transfert du contrôle initié par une instruction throw.
Autre que de retourner dans un bloc finally, ce sont les autres moyens?
La solution
Lancer une exception d'un bloc finally également écraserait l'exception d'origine (le cas échéant).
EDIT: Trouvé une référence expliquant "la fin abrupte"
.
De §14.1: Normal et Abrupt achèvement des états :
Une fin abrupte a toujours motif associé, qui est l'un des suivant:
- Une pause sans étiquette
- Une rupture avec une étiquette donnée
- A continuer sans étiquette
- A continuer avec une étiquette donnée
- Un retour sans valeur
- Un retour à une valeur donnée
- Un jet avec une valeur donnée, y compris les exceptions lancées par la machine virtuelle Java
Les trois derniers sont les seuls possibles dans une clause de finally
, à moins qu'il se trouve dans une boucle.
Autres conseils
Je suppose que cela pourrait aussi être une déclaration de rupture dans un commutateur, si le bloc finally fait partie d'un boîtier de commutation. En outre, si le bloc finally appelle un procédé mis en oeuvre dans d'autres langues, il peut faire tout ce que le compilateur de cette langue plaît.
Sys.exit()
ou de forcer un arrêt prématuré. les programmes de GUI en particulier sont connus pour appeler Sys.exit()
à une exception, en partie à cause d'un bug qui a survécu jusqu'à JVM 1.5 --- une exception levée du fil de l'interface graphique n'a pas réussi sur le fil principal.
Mise à jour: en particulier à qui ce downvoted. Désolé, mais sys.exit () fait exactement ce qu'on entend par un arrêt brutal, y compris causant la pile ne doit pas être dénoué; Je déposerai un bogue sur la documentation demain. Je peux parler de cela avec une certaine autorité ayant été un architecte principal Java chez Sun depuis quelques années.