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

Parfois je vois

try { } catch(Throwable e) { } 

Et parfois

 try { } catch(Exception e) { } 

Quelle est la différence

    En attrapant Throwable il inclut les éléments de la sous-classe Error . Vous ne devriez généralement pas le faire, sauf peut-être au niveau “catch all” le plus élevé d’un thread où vous voulez vous connecter ou gérer de manière absolue tout ce qui peut mal tourner. Ce serait plus typique dans une application de type framework (par exemple un serveur d’applications ou un framework de test) où il peut exécuter du code inconnu et ne doit pas être affecté autant que possible par tout ce qui ne va pas avec ce code.

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

    Error n’est pas récupérable par programme et ne doit généralement pas être interceptée, sauf à des fins de journalisation (qui le répète). Exception est récupérable par programme. Sa sous-classe RuntimeException indique une erreur de programmation et ne doit généralement pas être interceptée.

    Throwable est super classe d’ Exception ainsi que d’ Error . Dans des cas normaux, nous devrions toujours intercepter des sous-classes d’ Exception , afin que la cause racine ne soit pas perdue.

    Seuls les cas spéciaux où vous voyez la possibilité de problèmes qui ne contrôlent pas votre code Java, vous devriez attraper une Error ou un Throwable .

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

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

    Catching Throwable est particulièrement utile pour les boucles de serveurs externes qui délèguent toutes sortes de requêtes au code externe, mais qui ne peuvent elles-mêmes jamais se terminer pour maintenir le service en vie.