Professional Documents
Culture Documents
Creacin de tipos de
excepcin
Las excepciones son objetos.
Todos los tipos de excepcin (las clases)
deben extender de la clase Throwable o de
una de sus subclases.
Por convenio, los nuevos tipos de excepcin
extienden a Exception, una subclase de
Throwable
Excepciones
comprobadas
El compilador comprueba que nuestros
mtodos lanzan slo las excepciones que
ellos mismos han declarado que pueden
lanzar.
Representan condiciones que, aunque
excepcionales, se puede esperar
razonablemente que ocurran, y si ocurren
deben ser consideradas de alguna forma.
Excepciones no
comprobadas
Las excepciones no comprobadas
representan condiciones que reflejan errores
en la lgica de nuestro programa de los que
no es posible recuperarse de forma razonable
en ejecucin.
Extendiendo Exception
Algunas veces es til tener ms datos para
describir la condicin excepcional, adems de
la cadena de texto que proporciona
Exception. En estos casos se puede
extender a Exception creando una clase
que contenga los datos aadidos.
Ejemplo
Supongamos que se aade un mtodo
sustituirValor a la interfaz Atribuido
(Cap.4). Este mtodo sustituye el valor actual
de un atributo con nombre por un nuevo
valor. Si dicho atributo con nombre no existe,
se debera lanzar una excepcin.
Esa excepcin debera contener el nombre
del atributo. Se crea la clase
NoTalAtributoException:
Lanzamiento de
excepciones
Las excepciones se lanzan utilizando la
sentencia throw.
throw expresin
Donde expresin es una referencia a un
objeto Throwable.
Se amplia el mtodo sustituirValor de
la clase ImplAtribuido
{
Atrib atrib = buscar(nombre); //busca el atributo
if(atrib == null)
throw new NoTalAtributoException(nombre);
atrib.setValor(nuevoValor);
}
Si se lanza la excepcin no se regresa al flujo normal de
programa.
Las excepciones son objetos, por lo tanto deben crearse
antes de lanzarse.
Transferencia de control
Una vez que se produce una excepcin, las
acciones que hubiera detrs del punto donde
la excepcin se produjo no tiene lugar. La
siguiente accin que ocurrir estar o en un
bloque finally o en un bloque catch que
capture la excepcin
La clusula throws
3 posibilidades
Si se invoca a un mtodo que tiene una excepcin
comprobada en su clusula throws, existen tres opciones:
objAtribuido.aadir(atrib);
}
finally
La clusula finally de una sentencia
proporciona un mecanismo para ejecutar una
seccin de cdigo, se lance o no una
excepcin. Generalmente, la clusula
finally se utiliza para limpiar el estado
interno o para liberar recursos que no son de
objetos, como archivos abiertos almacenados
en variables globales.
pre();
try
{
//otras acciones
}
finally
{
post();
}
La segunda forma:
pre devuelve un valor que
se puede utilizar para
determinar si se complet
con xito o no. Slo si pre
se complet con xito se
invoca a post en la clusula
finally