2009-06-26 10 views

Respuesta

13

Las excepciones no verificadas son excepciones que no necesitan ser atrapadas en un bloque try - catch. excepciones sin marcar son subclases de las clases RuntimeException o Error.

Las excepciones comprobadas son excepciones que deben capturarse en un bloque try - catch.

La definición de excepciones marcado y sin marcar se pueden encontrar en Section 11.2: Compile-Time Checking of Exceptions de The Java Language Specification:

Las clases de excepciones sin marcar son la clase RuntimeException y su subclases, y la clase Error y sus subclases. Todas las demás clases de excepción son clases de excepciones comprobadas.

El hecho de que una excepción no comprobada está atrapado en un bloque catch no significa que sea una excepción comprobada - sólo significa que la excepción no comprobada fue capturado, y se manejó en el bloque catch.

Uno podría catch una excepción sin control, y luego throw una nueva excepción comprobada, por lo que cualquier método de llamada que método en el que una excepción sin control podría ocurrir y forzar un método que llama para manejar algún tipo de excepción.

Por ejemplo, un NumberFormatException que puedan ser proyectados al manejar algunos no se puede analizar con el método StringInteger.parseInt es una excepción sin control, por lo que no tiene que ser capturado. Sin embargo, el método de llamar a ese método puede querer su llamador manejar adecuadamente un problema de este tipo, por lo que puede tirar otra excepción que se comprueba (no es una subclase de RuntimeException.):

public int getIntegerFromInput(String s) throws BadInputException { 
    int i = 0; 
    try { 
     i = Integer.parseInt(s); 
    catch (NumberFormatException e) { 
     throw new BadInputException(); 
    } 

    return i; 
} 

En el ejemplo anterior, un NumberFormatException está atrapado en el try - bloque catch, y un nuevo BadInputException (que está destinada a ser una excepción comprobada) se lanza.

Cualquier persona que llame al método getIntegerFromInput se verá obligada a tomar un BadInputException y forzarlo a manejar entradas incorrectas. Si el NumberFormatException no iban a ser capturados y manipulados, las personas que llaman a este método tendrían que manejar la excepción correctamente.

(Además, hay que señalar, comer una excepción y hacer algo que no es realmente significativo no se considera una buena práctica -. Manejar excepciones en las que el manejo de excepciones significativas se puede realizar)

De La Tutoriales de Java :

+0

+1 por 'comer una excepción y hacer algo que no es realmente significativo no se considera una buena práctica: manejar excepciones donde se pueda realizar un manejo de excepción significativo' –

1

creo que la distinción es que el compilador marcará sin capturar las excepciones comprobadas y métodos que generan excepciones comprobadas, pero no declaran en la firma del método en tiempo de compilación.

Las excepciones no verificadas no requieren declaración ni captura, pero ninguna está prohibida. El compilador simplemente no los identifica como errores.

4

No, no se denomina excepción comprobada solo porque está atrapada. Se puede escribir un bloque catch para detectar cualquier tipo de excepción o error. Las excepciones controladas son aquellas que están sujetas al Catch or Specify Requirement, lo que significa que usted es requerido para atraparlas o declarar que su método puede arrojarlas. Puede pensar en el término marcado en el sentido de que el compilador verificará para asegurarse de cumplir con la captura o especificar el requisito. Los errores y las Excepciones de Runtime se llaman excepciones sin marcar porque el compilador no impone este requisito en ellas.

Cuestiones relacionadas