2009-05-26 17 views

Respuesta

128

No se deben atrapar o manipular los errores (excepto en los casos más raros). Las excepciones son el pan y la mantequilla del manejo de excepciones. El Javadoc lo explica así:

un error es una subclase de Throwable que indica serios problemas que una aplicación razonable no debe tratar de atrapar. La mayoría de estos errores son condiciones anormales .

vistazo a algunas de las subclases de Error, teniendo algunos de sus comentarios JavaDoc:

  • AnnotationFormatError - Se emite cuando el analizador de anotación intenta leer una anotación de un archivo de clase y determina que la anotación está malformado.
  • AssertionError - Lanzado para indicar que una afirmación ha fallado.
  • LinkageError - Las subclases de LinkageError indican que una clase tiene cierta dependencia en otra clase; sin embargo, la última clase ha cambiado de manera incompatible después de la compilación de la primera clase.
  • VirtualMachineError - Lanzado para indicar que la Máquina Virtual Java está rota o se ha quedado sin recursos necesarios para que continúe funcionando.

En realidad, hay tres subcategorías importantes de Throwable:

  • Error - Algo lo suficientemente grave como se ha hecho mal la mayoría de las aplicaciones deben chocar en lugar de tratar de manejar el problema,
  • excepción no comprobada (aka RuntimeException) - Muy a menudo un error de programación como NullPointerException o un argumento ilegal. Las aplicaciones a veces pueden manejar o recuperarse de esta categoría Throwable, o al menos captarla en el método run() del Thread, registrar la queja y continuar ejecutándose.
  • excepción comprobada (también conocido como todo lo demás) - Se espera que las aplicaciones sean capaces de atrapar y hacer algo de manera significativa con el resto, como FileNotFoundException y TimeoutException ...
+6

Oracle dice que 'excepciones no comprobadas = RuntimeExceptions';! 'Excepciones no verificadas = RuntimeExceptions + Errors'. Sé que plantea la pregunta: * ¿Es el error una excepción? *, Pero esto es lo que escriben. Este es solo uno de esos ejemplos: https://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html. –

+0

La pregunta no respondida es ** ¿cómo es que RuntimeException y Error son diferentes en esencia? ** Ambos están desmarcados e iguales en cualquier otra forma. – Pacerier

16

errores tienden a indicar el final de su aplicación como lo sabes Por lo general, no se puede recuperar y debe hacer que su máquina virtual salga. No debe capturarlos, excepto posiblemente para registrar o mostrar y el mensaje apropiado antes de salir.

Ejemplo: OutOfMemoryError - No hay mucho que pueda hacer ya que su programa ya no se puede ejecutar.

Las excepciones son a menudo recuperables e incluso cuando no lo son, generalmente significan que un intento de operación falló, pero su programa aún puede continuar.

Ejemplo: IllegalArgumentException - Aprobado datos no válidos a un método para que la llamada método falló, pero no afecta a las operaciones futuras.

Estos son ejemplos simplistas, y hay otra gran cantidad de información solo en Excepciones.

7

Sun puts it best:

un error es una subclase de Throwable que indica serios problemas que una aplicación razonable no debe tratar para ponerse al día.

3

La descripción de la clase Error es bastante claro:

Un Error es una subclase de Throwable que indica serios problemas que una aplicación razonable no debe tratar para ponerse al día. La mayoría de estos errores son condiciones anormales. El error ThreadDeath , aunque es una condición "normal", es también una subclase de Error porque la mayoría de las aplicaciones no deberían tratar de detectar .

Un método no está obligado a declarar en su cláusula throws cualquier subclase de Error que podrían ser lanzada durante la ejecución del método, pero no atrapado, ya que estos errores son condiciones anormales que no deberían ocurrir.

Citado del propio Java documentation of the class Error.

En resumen, no debe detectar Error s, excepto que tiene una buena razón para hacerlo. (Por ejemplo, para evitar que su implementación del servidor web se bloquee si un servlet se queda sin memoria o algo así).

Un Exception, por el contrario, es solo una excepción normal como en cualquier otro idioma moderno. Encontrará una descripción detallada en la documentación de la API de Java o en cualquier recurso en línea o fuera de línea.

0

Aquí está un resumen bastante bueno de la API de Java lo que es un error y de excepción representa:

un error es una subclase de Throwable que indica serios problemas que una aplicación razonable no debe tratar de 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.

Un método no está obligado a declarar en su cláusula throws cualquier subclase de error que podrían ser generados durante la ejecución del método, pero no atrapado, ya que estos errores son condiciones anormales que no deberían ocurrir.

otoh, por excepciones, Java API dice:

La Excepción clase y sus subclases son una forma de Throwable que indica que las condiciones de una aplicación razonable podría querer atrapar.

0

IMO un error es algo que puede hacer que su aplicación falle y no deba manejarse. Una excepción es algo que puede causar resultados impredecibles, pero que puede recuperarse.

Ejemplo:

Si un programa se ha quedado sin memoria es un error ya que la aplicación no puede continuar. Sin embargo, si un programa acepta un tipo de entrada incorrecto, es una excepción ya que el programa puede manejarlo y redirigir para recibir el tipo de entrada correcto.

0

Los errores son causados ​​principalmente por el entorno en el que se está ejecutando la aplicación. Por ejemplo, OutOfMemoryError se produce cuando JVM se queda sin memoria o se produce StackOverflowError cuando la pila se desborda.

Las excepciones son causadas principalmente por la aplicación en sí. Por ejemplo, NullPointerException se produce cuando una aplicación intenta acceder a un objeto nulo o se produce una excepción ClassCastException cuando una aplicación intenta convertir tipos de clases incompatibles.

Fuente: Difference Between Error Vs Exception In Java

2

Hay varias similitudes y diferencias entre las clases java.lang.Exception y java.lang.Error.

Similitudes:

  • Primera - ambas clases extiende java.lang.Throwable y como resultado hereda muchos de los métodos que son comunes para ser utilizado cuando se trata con errores tales como: getMessage, getStackTrace, printStackTrace y etc.

  • segundo lugar, como son subclases de java.lang.Throwable ambos heredan siguientes propiedades:

    • Throwable y cualquiera de sus subclases (incluyendo java.lang.Error) puede ser declarada en la lista de excepciones del método utilizando throws palabra clave. Dicha declaración requiere solo para java.lang.Exception y subclases, para java.lang.Throwable, java.lang.Error y java.lang.RuntimeException y sus subclases es opcional.

    • Solo java.lang.Throwable y subclases permitidas para el uso en la cláusula catch.

    • Solo java.lang.Throwable y las subclases se pueden utilizar con la palabra clave - throw.

La conclusión de esta propiedad está siguiendo tanto java.lang.Error y java.lang.Exception se pueden declarar en la cabecera del método, puede estar en catch cláusula, se puede utilizar con la palabra clave throw.

Diferencias:

  • Primera - diferencia conceptual: java.lang.Error diseñado para ser arrojada por la JVM e indicar problemas graves y la intención de dejar de la ejecución del programa en lugar de ser capturado (pero es posible que para cualquier otro sucesor java.lang.Throwable).

    Un pasaje de javadoc descripcion de java.lang.Error:

    ... indica graves problemas que una aplicación razonable debe no tratar de atrapar.

    En opuesta java.lang.Exception diseñado para representar los errores que esperado y puede ser manejado por un programador sin necesidad de terminar la ejecución del programa.

    Un pasaje de javadoc descripcion de java.lang.Exception:

    ... indica que las condiciones de una aplicación razonable podría querer captura.

  • La segunda diferencia entre java.lang.Error y java.lang.Exception que primero considera que es un sin marcar excepción para la comprobación de excepción en tiempo de compilación. Como el código de resultado arrojando java.lang.Error o sus subclases no requieren declarar este error en el encabezado del método. Al arrojar java.lang.Exception declaración obligatoria en el encabezado del método.

Throwable y su diagrama de clase sucesor (se omiten las propiedades y los métodos). enter image description here

2

Errors -

  1. Error s en Java son de tipo java.lang.Error.
  2. Todos los errores en Java están desactivados.
  3. Error ocurren en tiempo de ejecución. No serán conocidos por el compilador.
  4. Es imposible recuperarse de errores.
  5. Error s son en su mayoría causados ​​por el entorno en el que se está ejecutando la aplicación.
  6. Ejemplos:java.lang.StackOverflowError, java.lang.OutOfMemoryError

Exceptions -

  1. Exception s en Java son de tipo java.lang.Exception.
  2. Exception s incluyen tanto el tipo marcado como el no marcado.
  3. Se conocen excepciones comprobadas en el compilador donde el compilador desconoce las excepciones no comprobadas porque ocurren en tiempo de ejecución.
  4. Puede recuperar excepciones manejándolas a través de los bloques try-catch.
  5. Exception s son causados ​​principalmente por la aplicación en sí.
  6. Ejemplos: excepciones comprobadas: SQLException, IOException
    Excepciones Desactivada: ArrayIndexOutOfBoundException, ClassCastException, NullPointerException

lectura adicional: http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java/ http://javaconceptoftheday.com/wp-content/uploads/2015/04/ErrorVsException.png