2012-07-18 27 views
12

Generalmente, si cualquier clase se extiende Exception, se convierte en excepción comprobada. Runtime exception también extiende la excepción. Entonces, ¿cómo es unchecked exception?¿Por qué la excepción de tiempo de ejecución es una excepción no marcada?

¿Es como si tuvieran un cheque personalizado en el compilador para este caso especial?

EDIT: tengo idea adecuada sobre excepción revisada sin control v/s y sus pros & cos etc. No Excepto diferencias entre ellas en respuesta.

Respuesta

19

Es explícitamente en la especificación, section 11.1.1:

RuntimeException y todas sus subclases son, colectivamente, las clases de excepción de tiempo de ejecución .

Las clases de excepción no comprobada son las clases de excepción de tiempo de ejecución y las clases de error.

Las clases de excepciones comprobadas son todas clases de excepciones distintas de las clases de excepción sin marcar. Es decir, las clases de excepciones comprobadas son todas las subclases de Throwable distintas de RuntimeException y sus subclases y Error y sus subclases.

Así que sí, el compilador definitivamente sabe acerca de RuntimeException.

+0

¿por qué no podemos verificar las excepciones de tiempo de ejecución? como sabemos que podría haber una NullPointerException, entonces deberíamos verificarlo. ¿alguna idea? – UnKnown

+1

@UnKnown: No, no quieres que todos los métodos que escribas tengan que atrapar o declarar NullPointerException ... Eso sería horrible. –

+0

¿Qué significa conceptualmente que no hay diferencia entre las excepciones marcadas y las no verificadas? solo la implementación hace la diferencia? – UnKnown

7

Sí. Cualquier Throwable es una excepción marcada, excepto Error, RuntimeException, y (directa o indirectamente) subclases de los mismos.

Sin embargo, estos son controlados por el compilador , no por la JVM; las excepciones comprobadas son una característica de tiempo de compilación, no una característica de tiempo de ejecución. (Actualización: Y ahora veo que has editado tu pregunta para especificar "compilador" en lugar de "JVM" ☺.)


Elaborar un poco más lejos. . . no es como si hubiera algún tipo de interfaz de "verificación de excepción". La lógica está simplemente codificada: "cualquier clase de excepción es una excepción comprobada a menos que sea un subtipo de RuntimeException o Error".

+0

+1 para señalar que el compilador verifica Excepciones. – DerMike

+0

gracias por eso. Se actualizó la pregunta ☺ –

0

Según 11.1.1. los tipos de excepciones

Una excepción está representado por una instancia de la clase Throwable (una subclase directa de Object) o una de sus subclases.

Throwable y todas sus subclases son, colectivamente, las clases de excepción.

Tenga en cuenta que una subclase de Throwable no debe ser genérica (§8.1.2).

Las clases Excepción y Error son subclases directas de Throwable.

La excepción es la superclase de todas las excepciones de las que los programas normales pueden desear recuperarse.

El error es la superclase de todas las excepciones de las que normalmente no se espera que se recuperen los programas normales.

El error y todas sus subclases son, colectivamente, las clases de error.

La clase Error es una subclase 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) {" (§11.2.3) para captar todas las excepciones de las cuales la recuperación puede ser posible sin detectar errores de los cuales normalmente no es posible la recuperación.

La clase RuntimeException es una subclase directa de Excepción. RuntimeException es la superclase de todas las excepciones que pueden lanzarse por muchas razones durante la evaluación de la expresión, pero de las cuales aún es posible la recuperación.

RuntimeException y todas sus subclases son, colectivamente, las clases de excepción en tiempo de ejecución.

Las clases de excepción sin marcar son las clases de excepción en tiempo de ejecución y las clases de error.

Las clases de excepción comprobadas son todas clases de excepciones distintas de las clases de excepción sin marcar. Es decir, las clases de excepciones comprobadas son todas las subclases de Throwable distintas de RuntimeException y sus subclases y Error y sus subclases.

Cuestiones relacionadas