¿Cómo propagar el bloque try catch para Excepciones comprobadas?

Tengo una duda básica en Java Exceptions

es decir, todas las excepciones marcadas se extienden desde Exception La clase y las excepciones no verificadas se extienden desde RuntimeException. Pero Runtime Exception también se extiende desde Exception.

Pero por qué propagar try... catch bloquear con marcado Exceptions pero no en Excepciones no verificadas?

preguntado el 03 de mayo de 12 a las 18:05

No todas las excepciones no verificadas se extienden desde RuntimeException. Aparte de eso, no estoy seguro de lo que está preguntando: ¿se pregunta cómo el compilador de Java hace cumplir el requisito de declarar o manejar las excepciones verificadas? -

Creo que es una muy buena pregunta, también Error y sus subclases no están marcadas. No estoy seguro, pero creo que están definidos en el compilador para marcarlos o desmarcarlos. -

Sí. Pero estoy tratando de comparar con ArrayIndexOutOfBoundsException, excepciones de puntero nulo, etc.

3 Respuestas

En general, debe agregar diferentes catch bloques para cada tipo específico de excepción que pretenda manejar. Si está tratando de manejar (volviendo a generar) las excepciones verificadas, entonces debe saber qué tipo de excepciones volver a generar, solo agregue un catch bloque para volver a lanzar cada uno de esos tipos de excepción.

contestado el 03 de mayo de 12 a las 19:05

Creo que te estás preguntando, "¿Cómo puedo atrapar Exception pero no RuntimeException ?

Probablemente no deberías estar tratando de hacer eso. Debe capturar tipos específicos de excepciones cuando sea posible. Si necesita manejar todos los errores, entonces debe capturar Exception y eso lo atrapa todo.*

Rara vez querrías hacer catch (NullPointerException) porque si alguna vez sabes que puedes tener un null entonces deberías comprobarlo. Si su código está causando NullPointerException or ArrayOutOfBoundsException entonces deberías arreglar el código para que ya no los arroje.

Este código debería mostrarle cómo hacer lo que preguntó sobre:

public static void throwSomething(Exception throwMe)
{
    try {
        throw throwMe;
    }
    catch(Exception ex) {

        // Check if the object is a RuntimeException
        if(ex instanceof RuntimeException) {
            // Throw the same object again.
            // Cast to RuntimeException so the compiler will not
            // require "throws Exception" on this method.
            throw (RuntimeException) ex;
        }

        System.out.println("Caught an instance of a " +
                ex.getClass().toString());
    }
}

*Realmente, catch(Throwable) atrapará todo, incluso Errors.

contestado el 03 de mayo de 12 a las 20:05

RuntimeException tiene una superclase de excepción. Pero la excepción marcada se puede probar... atrapar bloque. Pero la excepción no marcada no lo hará, ¿por qué? - user1357722

¿Qué quieres decir? catch(NullPointerException e) funciona bien. - kevin panko

La forma más sencilla es la siguiente:

try { 
    //do stuff
} catch(RuntimeException e) {
    throw e;
} catch(SpecificCheckedException e) {
    //handle
} catch(Exception e) {
    //handle
}

contestado el 03 de mayo de 12 a las 20:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.