exceptions example catch java runtime-error runtimeexception

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 .