2010-04-22 10 views

Respuesta

12

Desde el Error Javadoc:

An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions. The ThreadDeath error, though a "normal" condition, is also a subclass of Error because most applications should not try to catch it.

Versus la Exception Javadoc

The class Exception and its subclasses are a form of Throwable that indicates conditions that a reasonable application might want to catch.

Así, a pesar de que una excepción sin control no está obligado a ser capturado, es posible que desee. Un error, no quieres atrapar.

1

Igual que las excepciones comprobadas son útiles para indicar cuándo sus métodos no pueden cumplir su contrato, pueden ocurrir otros errores fuera de su control que impidan que la máquina virtual Java cumpla con sus especificaciones, como cuando se agota la memoria. Como no puede planear tales errores con anticipación, debería atraparlos en todas partes, lo que frustra el principio de mantener un código ordenado. Por lo tanto, estos errores son excepciones sin marcar, es decir, excepciones que no es necesario incluir en una cláusula throws. Puedes atraparlos (bueno, algunos de ellos), pero el compilador no hará que lo hagas. Las excepciones no comprobadas se dividen en dos categorías: las que amplían RuntimeException y las que amplían Error. Me doy cuenta de que dije antes que las clases que heredan de la clase Exception son excepciones comprobadas, pero eso solo es verdad a medias: toda la verdad es que las clases en la jerarquía Exception que no sean las de la sub-jerarquía RuntimeException son excepciones marcadas.

Las excepciones que extienden RuntimeException representan errores que puede querer manejar, aunque no es obligatorio.

Como mencioné anteriormente, las Excepciones de tiempo de ejecución no se verifican porque hacer que las anuncie no tendría ningún efecto en establecer la exactitud de sus métodos y complicaría innecesariamente su código que de otra manera sería muy legible. Las excepciones derivadas de la clase Error, por otro lado, no están marcadas porque nunca desea atraparlas. Las excepciones de error son errores graves que requieren el cierre de la máquina virtual. InternalError, que utilicé arriba, extiende VirtualMachineError, que es una subclase de Error. OutOfMemoryError es otro error grave obvio, pero hay otros, como StackOverflowError y varios LinkageErrors. Un error de vinculación significa que algo salió mal cuando el cargador de clases intentó cargar una clase para su ejecución, y comúnmente ocurre ya sea porque alguna fuente externa ha introducido código malicioso en un intento de eludir el mecanismo de seguridad de Java, o porque proviene de un out-of- generador de código de byte espec.

1

Desde el JavaDoc:

An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch.

RuntimeException is the superclass of those exceptions that can be thrown during the normal operation of the Java Virtual Machine.

Por lo tanto, la única diferencia es que técnicamente son dos clases diferentes. Solo detectará ambos si declara

catch (Throwable e) { } 

Pero hay una gran diferencia en la forma en que están destinados a ser utilizados. Las excepciones no marcadas (RuntimeExceptions) están destinadas a tratar los errores de programación y otros problemas inesperados, pero debe capturarse y manejarse en la aplicación. Los errores intentan representar problemas que el programa no puede resolver, como quedarse sin memoria.

12

En resumen:

Usted puede, y debe, probablemente, a recuperarse de una excepción.

Puede, pero no debería, recuperar de un error.

+1

@ Eric Eijkelenboom: ¿Quizás quiso decir * "no debería recuperarse de un error" *? Debido a que * Error * se extiende * Throwable * y cualquier * Throwable * es seguramente fácil de detectar y se puede recuperar un gran número de errores de (* OutOfMemoryError *, solo por nombrar uno, es bastante fácil de solucionar en aplicaciones que tienen grandes cachés puede ser descartado a voluntad). – SyntaxT3rr0r

+0

Sí, debería haber sido más específico allí, haber sido editado. +1 para señalar esto :) –

+0

corto pero significativo. – Saif

1

Diferencia entre errores y excepciones no verificadas en java?

excepciones no comprobadas = RuntimeException clase y sus subclases + Error clase y sus subclases

Hay tanto el error son parte de excepción sin marcar. La excepción no verificada también contiene RuntimeException y sus subclases.

2

excepción no comprobada:

  • Las clases que se extienden RuntimeException se conocen como excepciones sin marcar
  • excepciones sin registrar no se comprueban en tiempo de compilación en lugar de que se comprueban en runtime.And es por eso que también son llamado "Excepción de tiempo de ejecución"
  • También son problemas recuperables mediante programación, pero a diferencia de excepción comprobada son cau sed por fallas en el flujo o configuración del código.
  • Ejemplo:ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException etc
  • Puesto que están error de programación, que se pueden evitar por muy bien/codificación sabiamente. Por ejemplo, "dividir por cero" se produce ArithmeticEceeption. Podemos evitarlos por una condición simple si - if(divisor!=0). Del mismo modo podemos evitar NullPointerException simplemente comprobando las referencias - if(object!=null) o usar incluso better techniques

error:

  • Error se refiere situación irrecuperable que no están siendo manejados por try/catch
  • Ejemplo:OutOfMemoryError, VirtualMachineError, AssertionError etc.

    Esta pregunta también puede ser útil en este contexto - Runtime/Checked/Unchecked/Error-Exception

1

El término «razonable» es relativo. Como es, también, el término «aplicación»

Como desarrollador de middleware, estoy acostumbrado a tratar con excepciones sin marcar, lanzados, o simplemente ignoradas, los desarrolladores de aplicaciones

lo que es razonable para ser atrapado por una aplicación es un subconjunto de lo que es razonable atrapar por su infraestructura subyacente (es decir, un tipo de aplicación)

Ahí es donde las excepciones no verificadas son diferentes de los errores. Un desmarcado puede ser atrapado por la infraestructura (es decir, para registrarse en a.base de datos), pero ignorado por una aplicación

El registro de un error que podría ser imposible porque no puede haber JVM para ejecutar el código de registro (o incluso el código de captura), es por eso que no es razonable para su captura

Como aparte, las excepciones marcadas son en mi humilde opinión sobreexplotadas. Tomarlos para promover excepciones de tiempo de ejecución es demasiado habitual

+0

"no podría haber JVM para ejecutar el código de registro (o incluso el código de captura)" Esa es la clave allí. Si tiene un error, algo realmente malo sucedió, y no debe suponer que la máquina virtual es estructuralmente sólida. Con una excepción, desprotegido, las cosas técnicamente seguirán funcionando. – ndm13

Cuestiones relacionadas