Diferencia entre usar Throwable y Exception en una captura de prueba

A veces veo

try { } catch(Throwable e) { } 

Y aveces

 try { } catch(Exception e) { } 

Cuál es la diferencia

Al atrapar Throwable incluye cosas que subclase Error . Por lo general, no debes hacer eso, excepto tal vez en el nivel más alto de “atrapar todo” de un hilo en el que quieras iniciar sesión o manejar absolutamente todo lo que pueda salir mal. Sería más típico en una aplicación de tipo de marco (por ejemplo, un servidor de aplicaciones o un marco de prueba) donde se puede ejecutar código desconocido y no debería verse afectado por nada que salga mal con ese código, tanto como sea posible.

El primero captura todas las subclases de Throwable (esto incluye Exception y Error ), el segundo atrapa todas las subclases de Exception .

Error puede recuperarse mediante progtwigción de ninguna manera y, por lo general, no se debe capturar, excepto para fines de registro (que lo reenvía). Exception es recuperable programáticamente. Su subclase RuntimeException indica un error de progtwigción y generalmente no se capturará también.

Throwable es una Throwable de Exception y también de Error . En casos normales, siempre debemos atrapar subclases de Exception , para que la causa raíz no se pierda.

Solo en casos especiales en los que vea la posibilidad de que algo vaya mal y no controle su código Java, debería detectar Error o Throwable .

Recuerdo haber atrapado a Throwable para señalar que no está cargada una biblioteca nativa.

Thowable atrapa realmente todo, incluso ThreadDeath, que se lanza de forma predeterminada para detener un hilo del método Thread.stop() ahora en desuso. Así que al capturar Throwable puedes estar seguro de que nunca abandonarás el bloque try sin al menos pasar por tu bloque catch, pero deberías estar preparado para manejar también OutOfMemoryError e InternalError o StackOverflowError .

Catching Throwable es más útil para los bucles externos del servidor que delegan todo tipo de solicitudes al código externo, pero nunca pueden terminar para mantener el servicio activo.