catch - runtime exception java example
RuntimeException & Error (2)
La Q es, ¿cuál es exactamente la diferencia entre extender RuntimeException y extender Error, excepto que extender Error es una mala práctica?
Ya has mencionado las principales diferencias. La especificación del lenguaje Java dice lo mismo en diferentes términos . Por Error
, dice
Error
es la superclase de todas las excepciones a partir de las cuales no se espera que los programas ordinarios se recuperen .
Para RuntimeException
, dice
La clase
RuntimeException
es una subclase directa de Exception.RuntimeException
es la superclase de todas las excepciones que pueden lanzarse por muchas razones durante la evaluación de expresiones, pero de las cuales aún es posible la recuperación .
Lo que debes quitar de estas citas es que verás comúnmente
try {
...
} catch (Exception e) { // catches RuntimeException
...
}
como captura de todos los casos, ya que Exception
es un super tipo de RuntimeException
. Pero casi nunca lo verás (nunca lo he visto)
try {
...
} catch (Error e) {
...
}
En la jerarquía de excepciones, los descendientes de RuntimeException
y los de Error
son excepciones / errores en tiempo de ejecución.
La diferencia entre los dos es que: los que están bajo RuntimeException
son los causados por una programación / diseño deficientes, y los de Error
son los que no pueden / no deben ser controlados por el desarrollador.
Para codificar una excepción dentro de la aplicación, por ejemplo, para lanzar una excepción cuando ocurre algo en la lógica de negocios, se extiende la excepción RuntimeException
.
La pregunta es, ¿cuál es exactamente la diferencia entre extender RuntimeException
y extender Error
, excepto que extender Error
es una mala práctica?
Tanto Error
como RuntimeException
son excepciones sin marcar, lo que significa que indican una falla en el programa y, por lo general, no deben detectarse. ( NullPointerException
, IndexOutOfBoundsException
, etc.)
Creo que la principal diferencia entre los dos es que RuntimeException
indica que hay un error con el programa, y un Error
es algo que es fatal pero está fuera del control del programa. ( OutOfMemorryError
, ThreadDeath
, etc.)
Por lo tanto, la subclasificación de un Error
es una mala práctica, ya que un error no suele ser algo que su programa pueda corregir en el tiempo de ejecución . En su programa, si necesita lanzar algo, use una Exception
.