Tema 5. Excepciones
Exception
Excepciones estándar
Capturar una Exception
Crear nuevas excepciones
Lanzar una Exception
1
Exception
Java incorpora en el lenguaje la gestión de errores
Exception: error o condición anormal producida
durante la ejecución del programa
Excepciones fatales: se debe finalizar la ejecución del
programa
Excepciones recuperables: se debe dar la oportunidad de
corregir el error
Formas de gestionar los errores:
Método tradicional: comprobando códigos de error que
devuelven los métodos
Soporte del lenguaje: el lenguaje proporciona construcciones
especiales
2
Excepciones estándar (i)
Los errores se representan mediante dos tipos de
clases derivadas de la clase Throwable: Error y
Exception
Clase Error:
Relacionada con errores de compilación, del sistema o de la
JVM → son irrecuperables
Clase Exception:
RuntimeException: Excepciones frecuentes (implícitas). El
propio lenguaje chequea y lanza las excepciones que derivan
de esta clase
Ej: recibir una referencia null en un método
Ej: sobrepasar el tamaño de un array
Resto de clases derivadas: Excepciones explícitas. Deben
gestionarse por el programador
3
Excepciones estándar (ii)
Por heredar de Throwable, todos los tipos
de excepciones pueden usar los métodos:
String getMessage() → Devuelve el mensaje de
error asociado a la excepción
String toString() → Devuelve una breve
descripción del objeto
void printStackTrace() → Imprime una traza de
la pila
java.lang.NullPointerException
at MyClass.mash(MyClass.java:9)
at MyClass.crunch(MyClass.java:6)
at MyClass.main(MyClass.java:3)
4
Capturar una Exception
Si en un método se produce una Exception,
el programa no compilará mientras no se
haga una de estas cosas:
Gestionar la excepción con una construcción del
tipo try/catch/finally
Relanzar la excepción hacia un método anterior en
la pila, utilizando la construcción throws en la
cabecera del método
El compilador obliga a capturar las
excepciones explícitas
5
Bloque try/catch/finally
Ejemplo:
try {
// código a vigilar
}
catch (IOException e1) {
System.out.println(e1.getMessage());
}
catch (MiExcepcion e2) {
System.out.println(e2.getMessage());
}
finally{
}
El código dentro de try
está vigilado.
Si se produce una
excepción se irá al bloque
catch correspondiente.
El bloque finally es
opcional. Si se incluye se
ejecuta siempre, haya o
no excepción, incluso si
hay un return en el
bloque try
6
Relanzar una Exception
Si no se desea gestionar en un método una
Exception, se puede relanzar la excepción al
método desde el que fue llamado
Hay que añadir a la cabecera del método: throws +
nombre de la Exception
Ejemplo:
void metodo1() throws IOException, MiExcepcion
Si metodo2 llama a metodo1, tiene 2 opciones:
Capturar las excepciones de metodo1 y gestionarlas
Desentenderse y remitirlas a otro método anterior en la pila
para gestionarlas
7
Crear nuevas excepciones
Deben derivar de la clase Exception o de una clase
derivada
Suelen tener 2 constructores:
Constructor sin argumentos
Constructor con un String como argumento. El String suele
definir el mensaje de error.
Conviene que los constructores llamen al constructor de la
clase base (super)
Ejemplo:
class MiExcepcion extends Exception
{
public MiExcepcion(){ super(); }
public MiExcepcion(String s){ super(s);}
}
8
Lanzar una Exception
Proceso de lanzamiento:
Crear un objeto Exception de la clase adecuada
Lanzar la excepción con la sentencia throw seguida del
objeto creado
Ejemplo:
MiExcepcion miExc = new MiExcepcion(“Mensaje”);
throw miExc;
Al lanzar la excepción el método termina de
inmediato sin devolver ningún valor
Sólo si el método incluye los bloques try/catch/finally se
ejecutará el bloque catch o el finally
9