tipos propagacion libreria jerarquia excepciones errores anidadas java exception unchecked-exception

libreria - propagacion de excepciones en java



Diferencia entre excepción no comprobada o excepción de tiempo de ejecución (8)

Esta fue una pregunta de entrevista. ¿Cuál es la principal diferencia entre la excepción no verificada y el error ya que ambos no están atrapados? Terminarán el programa.


Los JavaDocs resumen esto bastante bien.

java.lang.RuntimeException :

RuntimeException es la superclase de las excepciones que se pueden lanzar durante el funcionamiento normal de la máquina virtual Java.

No se requiere un método para declarar en su cláusula throws ninguna subclase de RuntimeException que pueda arrojarse durante la ejecución del método pero que no sea capturada.

java.lang.Error :

Un error es una subclase de Throwable que indica problemas graves que una aplicación razonable no debería intentar atrapar. La mayoría de esos errores son condiciones anormales. El error ThreadDeath, aunque es una condición "normal", también es una subclase de Error porque la mayoría de las aplicaciones no deberían intentar atraparlo.

No se requiere un método para declarar en su cláusula throws ninguna subclase de Error que pueda lanzarse durante la ejecución del método pero que no se capture, ya que estos errores son condiciones anormales que nunca deberían ocurrir.

Tenga en cuenta que "excepción sin marcar" es simplemente un sinónimo de una RuntimeException .


Los errores y las excepciones de tiempo de ejecución se conocen colectivamente como excepciones no verificadas.

Las excepciones de tiempo de ejecución son condiciones excepcionales que son internas de la aplicación y que, por lo general, la aplicación no puede anticipar ni recuperarse. Estos generalmente indican errores de programación, como errores de lógica o uso incorrecto de una API

Puede consultar este enlace que explica los tres tipos de excepciones.

this

Espero que esto ayude.


Nota: una RuntimeException ES una excepción no verificada

Una excepción sin marcar sería aquella que se sabe que es posible en un punto de la ejecución pero que no se detecta, por ejemplo, una NullPointerException siempre es una posibilidad si no se comprueba y hará que el programa finalice. Puede verificarlo al envolver el código en try-catch, pero esto no se aplica (a diferencia de una excepción comprobada que exigirá que la excepción se maneje de alguna manera).

Un error es algo que puede ocurrir en cualquier punto durante la ejecución y no se puede capturar realmente porque no está causado de manera implícita por una llamada de método en particular, etc. Por ejemplo, un OutOfMemoryError o un Error. Ambos podrían ocurrir en cualquier momento y provocarán que su aplicación finalice. Capturar estos errores no tiene sentido ya que indican que algo sucedió de lo que no podrás recuperarte.


RuntimeExceptions y Errors como OutOfMemoryError no necesitan ser atrapados y pueden lanzarse hasta que lleguen a main () que terminará la aplicación.

Otras excepciones causan un error de compilación si no están atrapadas o incluidas en la lista de tiradas.


Error : estas son condiciones excepcionales que son externas a la aplicación y que, por lo general, la aplicación no puede anticipar ni recuperarse.

Excepción de tiempo de ejecución : estas son condiciones excepcionales que son internas de la aplicación y que, por lo general, la aplicación no puede anticipar ni recuperarse.

Le recomendamos leer this :


Excepción comprobada:

  • Las clases que amplían la clase Throwable excepto RuntimeException y Error se conocen como excepciones comprobadas.
  • También se conoce como excepción de tiempo de compilación porque este tipo de excepciones se verifican en tiempo de compilación. Eso significa que si ignoramos estas excepciones (no se manejan con try/catch o throw the exception), se produce un error de compilación.
  • Son problemas recuperables mediante programación que son causados ​​por condiciones inesperadas fuera del control del código (p. Ej., Base de datos inactiva, error de E / S de archivo, entrada incorrecta, etc.)
  • Podemos evitarlos usando el bloque try/catch .
  • Ejemplo: IOException , SQLException , etc.

Excepción no verificada:

  • Las clases que extienden RuntimeException se conocen como excepciones sin marcar
  • Las excepciones no revisadas no se verifican en tiempo de compilación, sino que se verifican en el tiempo de ejecución. Y es por eso que también se llaman "Excepción de tiempo de ejecución".
  • También son problemas recuperables mediante programación pero, a diferencia de la excepción comprobada , son causados ​​por fallas en el flujo o la configuración del código.
  • Ejemplo: ArithmeticException , NullPointerException , ArrayIndexOutOfBoundsException , etc.
  • Dado que son un error de programación, se pueden evitar mediante una codificación agradable / inteligente. Por ejemplo, "dividir por cero" se produce ArithmeticEceeption . Podemos evitarlos mediante una simple condición if(divisor!=0) - if(divisor!=0) . Del mismo modo, podemos evitar NullPointerException simplemente verificando las referencias - if(object!=null) o usando incluso mejores técnicas

Error:

  • Error refiere a una situación irrecuperable que no está siendo manejada por try / catch
  • Ejemplo: OutOfMemoryError , OutOfMemoryError , AssertionError , etc.

Los errores indican problemas fundamentales que nunca deberían ocurrir. Si se encuentra con un error en el s.th. realmente malo paso
Por otro lado, las Excepciones no verificadas ( Excepciones de tiempo de ejecución) se utilizan cada vez que se puede esperar una excepción, pero no hay una forma razonable de manejarlo y, por lo tanto, una declaración de captura de prueba sería simplemente molesta y una pérdida de espacio.


Como se indica por su nombre, las excepciones no revisadas no se verifican en tiempo de compilación, lo que significa que el compilador no requiere métodos para capturarlas o especificarlas (con un throws ). Las clases que pertenecen a esta categoría se detallan en la sección 11.2 Comprobación en tiempo de compilación de las excepciones del JLS:

Las clases de excepciones sin marcar son la clase RuntimeException y sus subclases, y la clase Error y sus subclases . Todas las demás clases de excepción son clases de excepción comprobadas . La API de Java define una serie de clases de excepción, tanto verificadas como no verificadas. Los programadores pueden declarar clases de excepción adicionales, tanto verificadas como no verificadas. Ver §11.5 para una descripción de la jerarquía de clases de excepción y algunas de las clases de excepción definidas por la API Java y la máquina virtual Java.

La siguiente imagen ilustra la jerarquía de excepciones:

El Error clase y sus subclases son excepciones de las cuales normalmente no se espera que se recuperen los programas normales y, como se explica en §11.5 :

La clase Error es una subclase separada de Throwable , distinta de Exception en la jerarquía de clases, para permitir que los programas utilicen la expresión idiomática:

} catch (Exception e) {

para detectar todas las excepciones de las cuales la recuperación puede ser posible sin detectar errores de los que normalmente no es posible la recuperación.

Para resumir, RuntimeException es un subconjunto de excepciones sin marcar para las excepciones de las cuales la recuperación es posible (pero la excepción sin marcar no es un sinónimo de RuntimeException ya que muchos están respondiendo aquí).