Question

Parfois, je vois

try {

} catch(Throwable e) {

}

Et parfois

try {

} catch(Exception e) {

}

Quelle est la différence

Était-ce utile?

La solution

En capturant Throwable il inclut des choses que la sous-classe Error. Vous devez généralement pas le faire, sauf peut-être au plus haut niveau « fourre-tout » d'un fil où vous voulez vous connecter ou autrement gérer absolument tout ce qui peut aller mal. Il serait plus typique dans une application de type cadre (par exemple un serveur d'applications ou un framework de test) où il peut exécuter un code inconnu et ne doit pas être affecté par quoi que ce soit qui ne va pas avec ce code, comme autant que possible.

Autres conseils

La première attrape toutes les sous-classes de Throwable (ce qui inclut Exception et Error ), le second attrape toutes les sous-classes de < a href = "http://java.sun.com/javase/6/docs/api/java/lang/Exception.html" rel = "noreferrer"> Exception .

Error est irrécupérables programme en aucune façon et est généralement de ne pas être pris, sauf à des fins d'exploitation forestière (qu'elle traverse à nouveau). Exception est recouvrable par programme. Son RuntimeException de sous-classe indique une erreur de programmation et est généralement de ne pas l'être aussi.

Throwable est super classe de Exception ainsi que Error. Dans les cas normaux, nous devrions toujours prendre des sous-classes de Exception, de sorte que la cause ne soit pas perdu.

Seuls des cas particuliers où vous voyez la possibilité de choses qui vont mal ne contrôle pas de votre code Java, vous devez attraper Error ou Throwable.

  

Je me souviens attraper Throwable de signaler qu'une bibliothèque native n'est pas chargé.

Thowable attrape vraiment tout, même ThreadDeath qui est jeté par défaut pour arrêter un fil de la méthode Thread.stop() maintenant dépréciée. Donc, en attrapant Throwable vous pouvez être sûr que vous ne quittez jamais le bloc d'essai sans au moins passer par votre bloc catch, mais vous devriez être prêt à gérer aussi OutOfMemoryError et InternalError ou StackOverflowError.

Attraper Throwable est le plus utile pour le serveur externe boucles représentant toutes sortes de demandes à l'extérieur, mais le code peut se terminer jamais maintenir le service en vie.

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