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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top