68.    Excepciones [exceptions] (concepto)

Constituyen un mecanismo para propagar rápidamente situaciones excepcionales (típicamente errores que se detectan) saltándose el flujo normal de ejecución del programa.

Materialmente, una excepción es un objeto que ...

·         debe ser de una subclase de java.lang.Throwable

class Throwable

class Exception extends Throwable

class MisErrores extends Exception

 

·         se crea con new (o sea, usando un constructor)

MisErrores error = new MisErrores(“clave errónea“, clave);

 

·         entre sus campos suele llevar información de por qué se crea (o sea, de qué circunstancia excepcional es mensajero)

class MisErrores extends Exception {

    private Clave clave;

    MisErrores(String msg, Clave clave) {

        super(msg);

        this.clave = clave;

    }

}

 

·         lleva información acerca de en qué punto del código se crea y cual es la serie de llamadas a métodos que han llevado a ese punto del código (a esta información se la llama “traza”); la traza se puede imprimir en consola:

error.printStackTrace();

 

·         se lanza con throw

throw error;

 

·         el lanzamiento interrumpe la ejecución normal del código, es decir que la siguiente instrucción no se ejecuta; por ello el lanzamiento de la excepción suele estar en un bloque condicional

if (isOk(clave) == false)

    throw new MisErrores(“clave incorrecta”, clave);

... usamos la clave ...

 

·         se pueden capturar con bloques catch si

1.       se lanzan dentro de un bloque try y

2.       existe un bloque catch que captura excepciones de la clase de la excepción o de alguna superclase

try {

    ...

    throw new MisErrores(...);

    ...

} catch (MisErrores e) {

    System.err.println(e);    // informa del error producido

    e.printStackTrace();      // describe dónde se produjo

}

 

·         si la excepción se lanza en un método que no desea (o no puede, o no conviene) capturarla, el método puede propagarla, para lo cual debe indicarlo en su cabecera

void miMetodo(argumentos) throws MisErrores {

    ...

    throw ...;

    ...

}

 

Si en la traza (cadena de llamadas a métodos) encontramos un bloque try, la excepción puede ser capturada por un bloque catch, siempre y cuando el bloque catch tenga previsto capturar excepciones de esta clase o de alguna superclase.

Si en la traza no hubiera ningún bloque try con un catch adecuada, la excepción sale del programa, pasando al soporte de ejecución que

1.       informa en consola del problema (es decir, imprime la traza)

2.       detiene la ejecución

Temas relacionados

Vademécum
¿Pueden haber 2 excepciones "volando" a la vez?