info3-excepciones.ppt

Anuncio
Tratamiento de excepciones

Comparación entre lenguajes OO

Java
Excepciones en Java
Excepciones
Excepciones
Comprobadas
Excepciones
No Comprobadas
Tipos de excepciones

Comprobadas: Significa que el compilador
comprueba que nuestros métodos lanzan solo las
excepciones que ellos mismos han declarado que
pueden lanzar.

No comprobadas: son errores en tiempo de
ejecución, son errores lógicos del programa.

Ej: error en el índice de un array
Jerarquías de clases


En java todas las excepciones son subclases
de la clase predefinida java.lang.throwable
También define otras clases, por ejemplo: Error,
Exception y RuntimeException



Error: describe los errores internos y el
agotamiento de recursos del sistema de soporte
de ejecución de java.
Exception: representan los errores que pueden
manejar los programas.
RuntimeException: son excepciones generadas
por el sistema de soporte de ejecucion, como
resultado de un error en el programa.
Jerarquias de clases
Throwable
Error
LinkageError
Exception
VirtualmachineError
definidas
por el usuario
RunTimeException
Excepciones Comparadas

Todos los tipos de excepciones deben extender
de Throwable o una de sus subclases.

Por convenio:

Los nuevos tipos de excepciones extienden a la clase
Exception, que es una subclase de Throwable.
Ejemplo
public class NoTalAtributosException extends Exception{
public String nombreAtrib;
public NoTalAtributoException(String nombre){
super(“el atributo con el nombre “ + nombre + “ no se
encuntra”);
nombreAtrib = nombre;
}
}
La sentencia throw


Las excepciones son lanzadas por la sentencia
throw.
Dicha sentencia evalúa la exprecion, dando
como resultado un valor o variable que pueda
asignarle a Throwable
Ejemplo de throw
public void sustituirValor(String nombre, Object nuevoValor)
throws NoTalAtributoException{
Atrib atrib = buscar(nombre);
if (atrib == null)
throw new NoTalAtributoException(nombre);
atrib.setValor(nuevoValor);
}
Transferencia de control
Cuando se lanza una excepcion, se dice que la
sentencia o expresión que causa la excepción
termina bruscamente.
Significa que las acciones que hubiera detrás del
punto donde la excepción se produjo no tiene lugar.
Manejo de excepciones


En java, una excepción solo puede ser
manejada desde el interior de un bloque try
(intenta)
Cada manejador se especifica mediante una
sentencia catch (atrapa)


La sentencia catch e similar a una declaración
de función, cuyo parámetro identifica el tipo de
excepción a atrapar
En el interior del manejador, el nombre del
objeto se comporta como una variable local.

Un manejador con parámetros de tipo T
atrapara un objeto lanzado de tipo E si:


T y E son el mismo tipo
T es una super clase de E en el punto donde se
lanza
Captura
try{
sentencias
} catch (exception_tipo1 indentificador1) {
sentencias
} catch (exception_tipo2 indentificador2) {
sentencias
...
}finally {
sentencias
}
Modo de ejecución del bloque try

El cuerpo de la sentencia se ejecuta hasta que
se lance una excepción, o hasta que finalice
con éxito

En el caso que se lance una excepción, se
examinan todas las clausulas catch, hasta que
encuentre una que pueda ser asignable al tipo de
objeto.

Una vez que encuentra una clausula asignable se
ejecuta su cuerpo, y ninguna otra clausula.
Propagación de excepciones
Este lenguaje soporta la propagación de excepciones,
esto significa que si no encuentra ningún manejador de
excepción en el contexto de llamada de una función, el
contexto se da por terminado y se busca un manejador
en un contexto de llamada superior
Clausula finally
Si la sentencia try contiene una clausula finally, el
código que contiene se ejecutara después de que
finalice el proceso de dicha sentencia try, esto ocurre
independientemente de como finalizo el proceso, ya sea
normalmente o mediante una excepción
Ejemplo de la clausula finally
public boolean busquedaDe(String archivo, String palabra) throws
StreamException
{
Stream entrada = null;
try{
entrada = new Stream(archivo);
while (!entrada.eof())
if (entrada.next().equals(palabra))
return true;
return false;
} finally {
if (entrada!=null)
entrada.close();
}
}
Descargar