web-dev-qa-db-fra.com

Différence entre l'utilisation de Throwable et Exception dans un catch try

Parfois je vois

try {

} catch(Throwable e) {

}

Et parfois

try {

} catch(Exception e) {

}

Quelle est la différence

258
jax

En attrapant Throwable, il inclut des éléments de la sous-classe Error. Vous ne devriez généralement pas faire cela, sauf peut-être au plus haut niveau "attraper tout" d'un thread sur lequel vous voulez vous connecter ou autrement gérer absolument tout ce qui peut mal tourner. Ce serait plus typique dans une application de type framework (par exemple un serveur d’application ou un framework de test) où elle peut exécuter un code inconnu et ne devrait pas être affectée par quoi que ce soit qui va mal avec ce code, autant que possible.

211
Yishai

Le premier capture toutes les sous-classes de Throwable (ceci inclut Exception et Error ), le second saisit toutes les sous-classes de Exception .

Error est programmable de quelque façon que ce soit et ne doit généralement pas être attrapé, sauf à des fins de journalisation (qui le retransmet). Exception est récupérable par programme. Sa sous-classe RuntimeException indique une erreur de programmation et ne doit généralement pas être également interceptée.

156
BalusC

Throwable est une super classe de Exception ainsi que Error. Dans des cas normaux, nous devrions toujours attraper les sous-classes de Exception, afin que la cause fondamentale ne soit pas perdue.

Seuls les cas spéciaux où vous voyez une possibilité d'erreur, qui n'est pas sous le contrôle de votre code Java, doivent vous intercepter Error ou Throwable.

Je me souviens avoir attrapé Throwable pour signaler qu’une bibliothèque native n’était pas chargée.

19
rai.skumar

Thowable intercepte vraiment tout, même ThreadDeath, qui est lancé par défaut pour arrêter un thread à partir de la méthode désormais obsolète Thread.stop(). Donc, en attrapant Throwable, vous pouvez être sûr de ne jamais quitter le bloc try sans au moins passer par votre bloc catch, mais vous devez être prêt à gérer également OutOfMemoryError et InternalError ou StackOverflowError.

Capturer Throwable est particulièrement utile pour les boucles de serveur externe qui délèguent toutes sortes de requêtes à du code extérieur, mais ne peuvent jamais se terminer pour maintenir le service en vie.

16
x4u