05 java excepciones

18
Prof. Renny Batista Programación III Octubre, 2015 Excepciones La filosofía básica de Java es que "el código mal formado no se ejecutará".

Transcript of 05 java excepciones

Page 1: 05 java excepciones

Prof. Renny Batista Programación III Octubre, 2015

Excepciones La filosofía básica de Java es que "el código mal formado no se ejecutará".

Page 2: 05 java excepciones

Excepción

¿Qué es una excepción?

La palabra excepción indica una irregularidad en el software que se inicia en alguna sentencia del código al encontrar una condición anormal; no se debe confundir con una excepción hardware.

Mediante la captura de excepciones, Java proporciona un mecanismo que permite al programa sobreponerse a estas situaciones, pudiendo el programador decidir las acciones a realizar para cada tipo de excepción que pueda ocurrir.

Page 3: 05 java excepciones

Error

¿Qué es un error?

Un error representa una situación anormal irreversible, como por ejemplo un fallo de la maquina virtual. Por regla general, un programa no deberá intentar recuperarse de un error, dado que son situaciones que se escapan al control del programador.

Cada tipo de excepción está representada por una subclase de Exception, mientras que los errores son subclases de Error. Ambas clases (Exception y Error), son subclases de Throwable.

Object

Error Exception

Throwable

Excepciones Errores

Page 4: 05 java excepciones

Excepciones y condiciones anormales

Como se mencionó, las excepciones son eventos anormales que ocurren durante la ejecución del programa, a continuación tenemos algunos ejemplos que lanzan excepciones:

Cuando un número es dividido entre cero.

Cuando se accede a un elemento de un arreglo que este fuera del límite del arreglo.

Cuando existe una condición de desborde (overflow) durante la asignación de valores a variables numéricas.

Cuando un recurso es requerido por la aplicación y no está disponible.

Cuando se requiere de un archivo para lectura, y el mismo no se encuentra disponible en el sistema de archivos.

Cuando la aplicación accede a recursos del sistema sin autorización.

Page 5: 05 java excepciones

Secuencias de acciones cuando se produce una excepción

El manejador de excepciones recibe la

excepción

Analiza la naturaleza de la excepción

Crea un “objeto exception” apropiado a través del manejador

Prepara el “objeto exception” para ser manejado por el sistema en tiempo de

ejecución

Sistema de tiempo de ejecución

Localiza en la pila de llamadas la entrada del método en el cual ocurrió al condición de error

¿La excepción lanzada es de igual al tipo a la manejada?

Error

Localiza el manejador de excepciones apropiado para esta excepción

Preparar para capturar la excepción

Se desciende en la pila de llamadas para localizar el próximo manejador

¿Hay más manejadores en la pila?

Detiene el sistema en tiempo de ejecución

Igual

Diferente

Si

No

Page 6: 05 java excepciones

Clases de Excepción

Al producirse una excepción en un programa, se crea un objeto de la subclase de Exception a la que pertenece la excepción.

Java.lang-Exceptions

http://gallerily.com/java+exceptions+tree?image=867525489

Page 7: 05 java excepciones

Tipos de Excepciones

Desde el punto de vista del tratamiento de una excepción dentro de un programa, todas las clases de excepción se dividen en dos grandes grupos:

Excepciones marcadas

Excepciones no marcadas

Page 8: 05 java excepciones

Excepciones Marcadas

Son aquellas cuya captura es obligatoria. Normalmente, este tipo de excepciones se producen al invocar a ciertos métodos de determinadas clases y son lanzadas desde el interior de dichos métodos como consecuencia de algún fallo durante la ejecución de los mismos.

Todas las clases de excepciones, salvo RuntimeException y sus subclases, pertenecen a este tipo.

Page 9: 05 java excepciones

Declaración de excepciones marcadas

Los métodos que pueden provocar excepciones marcadas deben declarar estas en la definición del método.

Para declarar una excepción se utiliza la palabra throws, seguida de la lista de excepciones que el método puede provocar.

public class Nombre_Clase {

public String readLine() throws IOException {

//Código del método

}

public void Service() throws ServletException, IOException {

//Código del método

}

}

Excepciones que puede “lanzar” el método

Page 10: 05 java excepciones

Excepciones no marcadas

Pertenecen a este grupo todas las excepciones de tiempo de ejecución, es decir, RuntimeException y todas sus clases.

No es obligatorio capturar dentro de un programa Java una excepción no marcada, el motivo es que gran parte de ellas, se producen como consecuencias de una mala programación, por lo que la solución está en evitar que se produzcan.

Page 11: 05 java excepciones

Excepciones no marcadas

Instrucción que genera una excepción (División por cero)

Volcado de pila (programa abortado)

Datos de la excepción lanzada

Page 12: 05 java excepciones

Captura de excepciones

Los bloques try…catch…finally

Las instrucciones try, catch y finally proporcionan una forma elegante y estructurada de capturar excepciones dentro de un programa Java, evitando la utilización de instrucciones de control que dificultarían la lectura del código y lo harían más propenso a errores.

try {

//Instrucciones donde se puede producir excepciones

} catch (Tipo_de_excepcion Argumento) {

//Tratamiento excepcion 1

} catch (Tipo_de_excepcion Argumento) {

//Tratamiento excepcion 2

} finally {

//Instrucciones de ultima ejecución

}

Lista de sentencias que procesan la excepción

Tipo de excepción a procesar

Nombre del objeto excepción transferido al manejador

Page 13: 05 java excepciones

Captura de excepciones

El bloque try delimita aquella o aquellas instrucciones dónde se puede producir una excepción, Cuando esto sucede, el control del programa se transfiere al bloque catch definido para el tipo de excepción que se ha producido.

Un bloque catch define las instrucciones que deberán ejecutarse en caso de que se produzca un determinado tipo de excepción. Sobre la utilización de los bloques catch se debe tener en cuenta lo siguiente:

Se pueden definir tantos bloques catch como se considere necesario. Cada bloque catch servirá para tratar un determinado tipo de excepción, no pudiendo haber dos o más catch que tengan declarada la misma clase de excepción.

Un bloque catch sirve para capturar cualquier excepción que se corresponda con el tipo declarado o cualquiera de sus subclases.

Aunque haya varios posibles catch que pueden capturar una excepción, solo uno de ellos será ejecutado cuando esta se produzca.

Tras la ejecución de un catch, el control del programa nunca se devuelve al lugar donde se ha producido la excepción.

En el caso de que existan varios catch cuyas excepciones estén relacionadas por la herencia, los catch mas específicos deben estar situados por delante de los más genéricos.

Page 14: 05 java excepciones

Captura de excepciones

finally

Su uso es opcional. El bloque finally se ejecutará tanto si se produce una excepción como si no, garantizando así que un determinado conjunto de instrucciones siempre sean ejecutada.

Si se produce una excepción en try, el bloque finally se ejecutará después del catch para tratamiento de la excepción. En caso de que no hubiera ningún catch para el tratamiento de la excepción producida, el bloque finally se ejecutaría antes de propagar la excepción.

Si no se produce excepción alguna en el interior del try, el bloque finally se ejecutará tras la última instrucción del try.

Se usa básicamente para tareas de limpieza, como cerrar archivos , conexiones a bases de datos y liberar recursos.

Page 15: 05 java excepciones

public class Principal {

public static void main(String[] args) {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

try {

imprime(br);

} catch ( IOException e ) {

System.out.println("Fallo de lectura..!");

}

}

static void imprime(BufferedReader bf) throws IOException {

String n = bf.readLine(); //Puede provocar una excepción

System.out.println(n);

}

}

Propagación de una excepción

En el caso de que no se tenga previsto ninguna acción particular para el tratamiento de una determinada excepción, es posible propagar la excepción sin necesidad de capturarla, dejando que sean otras partes del programa las encargadas de definir las acciones para su tratamiento (throws).

Declara la excepción para que sea propagada

Es capturada aquí, al invocar el método imprime

Page 16: 05 java excepciones

Propagación de una excepción

La excepción no es tratada y se lanza al método que llamo al método actual

1 2

La excepción no es tratada por el método main() y el programa aborta

su ejecución

3

La sentencia lanza una excepción

Excepción no es tratada y se lanza a la convocatoria del método

Page 17: 05 java excepciones

Métodos para el control de una excepción

Los métodos más importantes son:

String getMessage(). Devuelve un mensaje de texto asociado a la excepción, dependiendo del tipo de objeto de excepción sobre el que se aplique.

void printStackTrace(). Envía a la consola el volcado de la pila asociado a la excepción. Su uso puede ser muy útil durante la fase de desarrollo de la aplicación.

void printStackTrace(PrintStream s). Esta versión permite enviar el volcado de pila a un objeto PrintStream cualquiera, por ejemplo, un archivo log.

Page 18: 05 java excepciones

Bibliografías

Martín, Antonio. Programador Certificado Java 2. Curso Práctico. Editorial

RA-MA. 2da Edición.

Joyanes L., Zahonero I. Programación en Java 6. Algoritmos, programación orientada a objetos e interfaz gráfica de usuarios. McGRAW-HILL, 1ra Edición.