Ce qui est supprimée exception?
Un commentaire (par l'utilisateur soc) sur un réponse à une question à propos de la queue d'appel d'optimisation mentionné que Java 7 a une nouvelle fonctionnalité appelée "supprimé exceptions", en raison de "l'addition de BRAS" (support pour les Processeurs ARM?).
Qu'est ce qu'un "supprimé exception" dans ce contexte? Dans d'autres contextes, un "supprimé" l'exception serait une exception qui a été pris et alors ignorée (rarement une bonne idée); c'est clairement quelque chose de différent.
- Je ne vois aucune mention de cela dans le "Langage de Programmation Java Améliorations" description download.oracle.com/javase/7/docs/technotes/guides/language/...
- Le BRAS Automatique de Gestion des Ressources, par exemple infoq.com/news/2010/08/arm-blocks
- BRAS, dans ce contexte, c'est l'ancien nom de try-with-resources. Ils se sont arrêtés à l'aide de BRAS et a commencé à utiliser try-with-resources quelque temps avant Java 7 expédiés. Et @danielkullmann a raison dans ce BRAS est synonyme de
Vous devez vous connecter pour publier un commentaire.
Je crois que l'auteur fait référence à une exception qui est semi-ignoré quand il est lancé au sein de l'implicite
finally
bloc d'un try-with-resources bloc, dans le contexte d'une exception levée de latry
bloc:(C'est une citation d'un article appelé "Supprimer les Exceptions" à partir de la page liée.)
finally
bloc déclenche une exception lorsque letry
bloc a déclenché une exception ainsi, l'exception d'origine de latry
bloc de perte ou de "supprimer" (voir http://accu.org/index.php/journals/236 pour plus d'infos). Java 7 vient d'ajouter une méthode pratique pour stocker l'exception de lafinally
bloc parce que l'finally
est implicitement généré par un try-with-resources.De clarifier la citation de Jon réponse, une seule exception peut être levée par une méthode (pour exécution), mais il est possible, dans le cas d'un
try-with-resources
, pour de multiples exceptions à être jetés. Par exemple, on peut être jeté dans le bloc et une autre pourrait être levée à partir de l'implicitefinally
fournis par letry-with-resources
.Le compilateur doit déterminer lequel de ces "vraiment" jeter. Il choisit de lancer l'exception soulevée dans l'explicite (le code dans le
try
bloc) plutôt que celui lancé par le code implicite (lafinally
bloc). Par conséquent, l'exception(s) jeté dans l'implicite bloc sont supprimées (ignoré). Cela se produit uniquement dans le cas de plusieurs exceptions.try
...finally
clauses lors de l'ouverture et de laclose()
ing fichiers: stackoverflow.com/questions/3305405/...Exception(Exception cause)
constructeur est utilisé pour envelopper provoquant une exception dans l'autre, peut-être le plus descriptif. Toutefois, dans ce cas, nous parlons de deux groupes distincts d'exception pour lesquels il n'existe pas de relation de cause à effet. Exception Un n'est pas la cause de l'Exception B donc il ne serait pas logique pour l'envelopper l'un dans l'autre. Aussi, vous êtes en supposant que le codeur est explicitement lancer la deuxième exception à la règle et a accès à la première. Qui ne serait pas le cas si les deux où est jeté par les appels à la bibliothèque.If an exception is thrown from the try block and one or more exceptions are thrown from the try-with-resources statement, then those exceptions thrown from the try-with-resources statement are suppressed
Avant de Java7; Il y a des exceptions générées dans le code, mais ont été ignorés en quelque sorte.
par exemple)
Un nouveau constructeur et deux nouvelles méthodes ont été ajoutées à la classe Throwable dans le JDK 7.
Ce sont comme ci-dessous:
avec cette nouvelle approche, nous pouvons nous occuper de ceux supprimé exception ainsi.
Aussi conscients que c'est différent de enchaînés exceptions (été introduit avec le JDK 1.4 et ont pour but de permettre de suivre facilement les relations de causalité entre des exceptions.)
Supprimée exceptions supplémentaires sont les exceptions qui se produisent à l'intérieur d'un try-with-resources déclaration (introduit dans Java 7) lorsque
AutoCloseable
ressources sont fermés. Parce que plusieurs exceptions peuvent se produire lors de la fermeture deAutoCloseable
des ressources, des exceptions supplémentaires qui sont attachés à un principale exception comme étant supprimés exceptions.En regardant le pseudo-code d'un morceau de try-with-resources exemple de code, norme JVM, les gestionnaires d'exception sont utilisés pour accueillir le try-with-resources sémantique.
Concedering le code ci-dessous:
Avec toutes les lignes, vous obtiendrez:
java.lang.RuntimeException: from finally!
Retrait
finally
bloc, vous obtiendrez:java.lang.RuntimeException: from catch!
Retrait
catch
bloc, vous obtiendrez:Je pense que cela a à voir avec le "enchaîné exception des installations". Il aura une incidence sur la façon dont l'exception est gérée par cette installation comme la trace de la pile évolue. Au fil du temps exceptions qui font partie d'un groupe de enchaînés exception peut être supprimée. Regardez le Lancer de la documentation pour plus de détails.
Vous pouvez supprimer les Exceptions en Java 6 (avec un peu de ruse impliqués),
J'ai créé un utilitaire qui gère de manière transparente la suppression de l'exception dans la version 1.6 de Java et Java 1.7. Vous pouvez trouver à la mise en œuvre ici
Tous vous avez besoin est l'appel de:
pour supprimer une exception, et
pour obtenir le supprimé exceptions une Exception, dans le cas où quelqu'un utilise encore la version 1.6 de Java
BRAS - Automatique de Gestion des Ressources(Introduit depuis Java 7)
Prendre un exemple très simple
Maintenant, si
readLine()
fonction lève une Exception et puis mêmeclose()
fonction [dans le bloc finally] throws exception alors le plus tard est donné plus d'importance et est renvoyée à la fonction appelante. Dans ce cas, leException thrown by the readLine() method is ignored/suppressed
. Vous pouvez la chaîne à l'origine de l'exception dans l'exception et de renvoyer l'exception du bloc finally.Depuis
java 7
fonctionnalité a été fourni pour récupérer supprimé des Exceptions. Vous pouvez appelerpublic final java.lang.Throwable[] getSuppressed()
fonction sur le attrapé throwable objet pour afficher l'supprimé Exceptions.Pour Eg.
Maintenant, si
br.readLine();
ligne des lancersException1
et puis disonsException2
est levée lors de la fermeture de la ressource [Imaginez ce qui se passe, de manière implicite, enfin, bloc try-with-déclaration de ressources crée] puis Exception1 supprime Exception2.Quelques points à noter ici -
J'ai compilé la plupart des scénarios possibles avec des extraits de code et de sortie dans la suite du post.
Supprimé les exceptions en java 7
Espère que ça aide.
Exception
qui provient d'un try{} bloc ne sera pas automatiquement supprimé. Le programmeur peut choisir de le faire, que vous n'avez pas. Seulement try-with-resources, lorsque cela est nécessaire, doit supprimer les exceptions automatiquement. Et quand il le fait, c'est l'exception de votre équivalent bloc finally qui deviendra supprimée.