Sie sind auf Seite 1von 10

Programacin Orientada a Objetos en Java

Curso 2006 - 2007

Tema 6 Excepciones

Gonzalo Mndez Pozo Dpto. de Ingeniera de Software e Inteligencia Artificial Universidad Complutense de Madrid

Excepciones
Qu son?
Mecanismo de control de errores en tiempo de ejecucin Una forma de hacer que la aplicacin contine la ejecucin si se produce un error

Qu sucede si no se puede abrir un fichero? Qu pasa si un socket se cierra de manera inesperada? Y si dividimos por cero?
Gonzalo Mndez - Dpto. Ingeniera de Software e Inteligencia Artificial

Excepciones
Para qu sirven?
A veces se usan para detectar situaciones inusuales en la ejecucin Si se controlan todos los posibles errores directamente, el cdigo se puede volver ilegible Con las excepciones se separa el cdigo de un mtodo del cdigo que controla los errores
Gonzalo Mndez - Dpto. Ingeniera de Software e Inteligencia Artificial

Excepciones
Como casi todo lo dems en java, las excepciones son objetos (que se crean cuando ocurre una situacin anmala) Se lanzan para que otra parte del cdigo las capture y las trate

Gonzalo Mndez - Dpto. Ingeniera de Software e Inteligencia Artificial

Jerarqua de Excepciones
Object

Throwable

Error

Exception

Gonzalo Mndez - Dpto. Ingeniera de Software e Inteligencia Artificial

Jerarqua de Excepciones
Las excepciones que se derivan de Error suelen estar relacionadas con la mquina virtual y no se espera que se capturen ni se traten Las Excepciones derivadas de Exception s que deben ser tratadas, y en algunos casos es obligatorio hacerlo para que el programa compile
Gonzalo Mndez - Dpto. Ingeniera de Software e Inteligencia Artificial

Jerarqua de Excepciones
No es necesario tratar las Excepciones que derivan de RuntimeException:
ArithmeticException IndexOutOfBoundsException NullPointerException SecurityException

Gonzalo Mndez - Dpto. Ingeniera de Software e Inteligencia Artificial

Tratamiento de Excepciones
El cdigo que puede generar la excepcin debe encerrarse dentro de un bloque try
try { // Cdigo que puede generar la excepcin }

A continuacin, la excepcin se captura con un bloque catch


catch (Exception e) { // Cdigo para tratar el error }

Gonzalo Mndez - Dpto. Ingeniera de Software e Inteligencia Artificial

Tratamiento de Excepciones
El cdigo dentro del try puede generar ms de una excepcin, y se pueden capturar todas ellas
try { //Cdigo que puede provocar el error } catch(IOException ioe) { //Cdigo para tratar la IOException } catch(Exception e) { //Cdigo para tratar la Exception }
Gonzalo Mndez - Dpto. Ingeniera de Software e Inteligencia Artificial

Tratamiento de Excepciones
Se puede capturar una excepcin utilizando un tipo de excepcin ms general
try { //Cdigo que produce una excepcin de tipo IOException } catch (Exception e) { //Cdigo para tratar una Exception }
Gonzalo Mndez - Dpto. Ingeniera de Software e Inteligencia Artificial

Tratamiento de Excepciones
Esto ltimo se puede hacer gracias a que unas excepciones heredan de otras Slo se puede hacer con excepciones dentro de la misma jerarqua Sirve para tratar de manera comn varios tipos de excepciones distintos

Gonzalo Mndez - Dpto. Ingeniera de Software e Inteligencia Artificial

Tratamiento de Excepciones
CUIDADO: Si un bloque de cdigo lanza varias excepciones y se usan varios catch
La excepcin se captura en el primer catch que se ajusta a la excepcin Los catch deben capturar las excepciones ms concretas en primer lugar, y las ms generales al final Si no lo hacemos as, hay bloques catch en los que no se entrar nunca
Gonzalo Mndez - Dpto. Ingeniera de Software e Inteligencia Artificial

Tratamiento de Excepciones
try { //cdigo que genera //excepciones } catch(IOException ioe) { //catch accesible } catch (Exception e) { //catch accesible } try { //cdigo que genera //excepciones } catch(Exception e) { //catch accesible } catch (IOException ioe) { //catch NO accesible }

Gonzalo Mndez - Dpto. Ingeniera de Software e Inteligencia Artificial

Tratamiento de Excepciones
A veces, cuando se produce una excepcin, la aplicacin queda es un estado inestable Al tratamiento de una excepcin se le puede aadir al final un bloque finally que se ejecuta siempre, se produzcan o no excepciones Se puede usar para cerrar ficheros, liberar recursos, etc.
Gonzalo Mndez - Dpto. Ingeniera de Software e Inteligencia Artificial

Tratamiento de Excepciones
try { //cdigo que genera excepciones } catch(IOException ioe) { //tratamiento de la excepcin } finally { //cdigo que se ejecuta siempre }
Gonzalo Mndez - Dpto. Ingeniera de Software e Inteligencia Artificial

Tratamiento de Excepciones
Si una excepcin no se captura se propaga hacia el mtodo llamante, para que ste la trate Si no la trata, se sigue propagando hasta llegar al main Si en el main tampoco se trata, se aborta la ejecucin del programa

Gonzalo Mndez - Dpto. Ingeniera de Software e Inteligencia Artificial

Lanzar Excepciones
Parte del tratamiento de una excepcin puede incluir la propagacin de la misma para que tambin la traten los mtodos llamantes Tambin puede suceder que queramos que nuestro cdigo lance una excepcin en una situacin determinada En ambos casos es necesario decir que el mtodo puede lanzar una excepcin
Gonzalo Mndez - Dpto. Ingeniera de Software e Inteligencia Artificial

Lanzar Excepciones
Esto se hace utilizando la palabra reservada throws en la cabecera del mtodo
public void miMetodo() throws ArithmeticException

Posteriormente, en el cdigo, se puede lanzar una excepcin usando la palabra reservada throw
catch (IOException ioe) { throw ioe; } throw new NullPointerException();

Gonzalo Mndez - Dpto. Ingeniera de Software e Inteligencia Artificial

Crear Nuevas Excepciones


Se pueden crear nuevas excepciones creando una nueva clase que herede de Exception Se suele aadir un constructor por defecto y otro que acepta un String Llamar al constructor de Exception desde el constructor de la nueva clase Si hace falta, aadir atributos, otros constructores y otros mtodos
Gonzalo Mndez - Dpto. Ingeniera de Software e Inteligencia Artificial

10

Das könnte Ihnen auch gefallen