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?