Tema 5. Excepciones

Anuncio
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
Descargar