8/7/2019 10 Manejo de Excepciones
1/28
1
Manejo de Excepciones
Tecnologa de la Programacin IIng. Zoraida Vidal Melgarejo, Mg.
8/7/2019 10 Manejo de Excepciones
2/28
2
Excepciones
Una excepcin es un evento que ocurre durante la ejecucin
de un programa y detiene el flujo normal de la secuencia de
instrucciones de ese programa; en otras palabras, una
excepcin es una condicin anormal que surge en unasecuencia de cdigo durante su ejecucin.
Una excepcin es un objeto que describe una condicin
excepcional producida en un fragmento de cdigo. Estaexcepcin se detecta en tiempo de ejecucin y no durante la
compilacin del cdigo.
8/7/2019 10 Manejo de Excepciones
3/28
3
Excepciones
Una excepcin, interrumpe el procesamiento normal porque
no cuenta con la informacin necesaria para resolver el
problema, en el contexto en el que sucedi. Todo lo que se
puede hacer es abandonar dicho contexto y pasar elproblema a un contexto de ms alto nivel.
Las excepciones en Java estn destinadas, al igual que en el
resto de los lenguajes que las soportan, para la deteccin ycorreccin de errores. Utilizadas en forma adecuada, las
excepciones incrementan en gran medida la robustez de las
aplicaciones.
8/7/2019 10 Manejo de Excepciones
4/28
4
Un programa sin control de excepciones
8/7/2019 10 Manejo de Excepciones
5/28
5
Un programa sin control de excepciones
El bloque de cdigo intenta recuperar el elemento de ndice 5
del array alumnos, al no existir dicha referencia se lanza la
excepcin ArrayIndexOutBoundsException , al nocontemplar ninguna accin para este caso el programa detiene
su ejecucin.
8/7/2019 10 Manejo de Excepciones
6/28
6
Un programa que controla excepciones
8/7/2019 10 Manejo de Excepciones
7/28
7
Un programa que controla excepciones
Este bloque de cdigo tambin desea acceder al elemento de
ndice 5 que no tiene ninguna referencia, pero a diferencia del
anterior, este suceso ha sido previsto y se muestra un mensajeal usuario indicando que no hay elementos en el arreglo y la
ejecucin del programa termina de manera natural.
8/7/2019 10 Manejo de Excepciones
8/28
8
Excepciones. Jerarqua base
8/7/2019 10 Manejo de Excepciones
9/28
9
Excepciones. Jerarqua base
Una excepcin es un objeto derivado directa, o
indirectamente, de la clase Throwable. Tanto el intrprete
Java como muchos mtodos de las mltiples clases de Java
pueden lanzar excepciones y errores. La clase Throwable
tiene dos subclases: Error y Exception.
8/7/2019 10 Manejo de Excepciones
10/28
10
Excepciones. Jerarqua base
Un Error indica que se produce un fallo no recuperable, delque no se puede recuperar la ejecucin normal del
programa, por lo tanto en este caso no hay nada que hacer.
Los errores, normalmente, hacen que el intrprete Java
presente un mensaje en el dispositivo estndar de salida yconcluya la ejecucin del programa.
8/7/2019 10 Manejo de Excepciones
11/28
11
Excepciones. Jerarqua base
Una Exception indicar una condicin anormal que puede
ser subsanada para evitar la terminacin de la ejecucin del
programa.
8/7/2019 10 Manejo de Excepciones
12/28
12
Clasificacin de Excepciones
Verificadas en Compilacin (Checked exception): son
errores que el compilador verifica y que pueden recuperarse.
Java requiere que los mtodos que disparan excepciones, las
capturen y manejen el error o, especifiquen todas lasexcepciones checked que pueden producirse dentro de su
alcance. Por ejemplo, al intentar abrir un archivo, podra
dispararse una excepcin, ya que el archivo puede no
existir.
8/7/2019 10 Manejo de Excepciones
13/28
13
Clasificacin de Excepciones
No Verificadas en Compilacin (Unchecked exception):
representan errores de programacin difciles de preveer.
Son excepciones disparadas automticamente por el sistema
de ejecucin de Java. Por ejemplo, las excepcionesaritmticas (divisin por cero), excepciones de referencias
nulas (acceso a un objeto mediante un puntero nulo),
excepciones de indexacin (acceso a un elemento de un
arreglo con un ndice muy chico o demasiado grande) y
error de casting. Java no obliga que stas excepciones sean
especificadas, ni capturadas para su manejo.
8/7/2019 10 Manejo de Excepciones
14/28
14
Clasificacin de Excepciones
Toda excepcin que herede de RuntimeException ser una excepcin noverificada en compilacin, ya que depende de la ejecucin del programa
para que pueda lanzarse.
8/7/2019 10 Manejo de Excepciones
15/28
15
Clasificacin de Excepciones
Toda excepcin que sea subclase de Exception (excepto RuntimeException)es verificada en tiempo de compilacin. Exception y sus subclases indican
situaciones que una aplicacin debera tratar de forma razonable.
8/7/2019 10 Manejo de Excepciones
16/28
16
Jerarqua de Excepciones
8/7/2019 10 Manejo de Excepciones
17/28
17
Captura de excepciones: Bloque trycatch
Se utilizan para capturar las excepciones que se han podido
producir en el bloque de cdigo delimitado por try y catch.
En cuanto se produce la excepcin, la ejecucin del bloque
try, que la contiene, termina. La clusula catch recibe como
argumento un objeto Throwable.
8/7/2019 10 Manejo de Excepciones
18/28
18
Captura de excepciones: Bloque trycatch
try
Es el bloque de cdigo donde se prev que se genere una
excepcin. El bloque try tiene que ir seguido, al menos, por
una clusula catch o una clusula finally.
catch
Es el cdigo que se ejecuta cuando se produce la excepcin.
No hay cdigo alguno entre un bloque try y un bloque
catch, ni entre bloques catch.
8/7/2019 10 Manejo de Excepciones
19/28
19
Captura de excepciones: Bloque trycatch
//Bloque 1
try {
// Bloque 2
} catch (Exception e) {
// Bloque 3
}
// Bloque 4
8/7/2019 10 Manejo de Excepciones
20/28
20
Captura selectiva de excepciones
Es posible manejar con la clase Exception todas las
excepciones lanzadas desde cualquier punto, ya que todas las
excepciones derivan deException, aunque el tratamiento sera
igual para cada una de ellas, sin poder tener un tratamientoespecial en cada caso.
Por otro lado, uno puede capturar Excepciones especficas
indicndolas en el bloque catch; adems, pueden tener tantosbloques catch como errores predecibles dentro del bloque try.
8/7/2019 10 Manejo de Excepciones
21/28
21
Captura selectiva de excepciones
//Bloque 1
try {
// Bloque 2
} catch (ArithmeticException ex) {
// Bloque 3
} catch (NullPointerException ex) {
// Bloque 4}
// Bloque 5
8/7/2019 10 Manejo de Excepciones
22/28
22
La clusula finally
En ocasiones, nos interesa ejecutar un fragmento de cdigo
independiente de si se produce o no una excepcin (por
ejemplo, cerrar un archivo que estemos manipulando o una
conexin a una fuente de datos). Si el cuerpo del bloque try llega a comenzar su ejecucin, el
bloquefinally siempre se ejecutar:
Detrs del bloque try si no se producen excepciones.
Despus de un bloque catch si ste captura la excepcin. Justo despus de que se produzca la excepcin si ninguna
clusula catch captura la excepcin y antes de que la
excepcin se propague hacia arriba.
8/7/2019 10 Manejo de Excepciones
23/28
23
La clusula finally
//Bloque 1
try {
// Bloque 2
} catch (Exception e) {
// Bloque 3
} finally {
// Bloque 4}
// Bloque 5
8/7/2019 10 Manejo de Excepciones
24/28
24
Lanzamiento de excepciones
La sentencia throw
La sentencia throw se utiliza para lanzar explcitamente una
excepcin. En primer lugar se debe obtener un descriptor de
un objeto Throwable, bien mediante un parmetro en una
clusula catch o, se puede crear utilizando el operador new.
La forma general de la sentencia throw es:
throw ObjetoThrowable;
8/7/2019 10 Manejo de Excepciones
25/28
25
Lanzamiento de excepciones
La sentencia throw
8/7/2019 10 Manejo de Excepciones
26/28
26
Lanzamiento de excepciones
La sentencia throw
El flujo de la ejecucin se detiene inmediatamente despus
de la sentencia throw, y nunca se llega a la sentencia
siguiente. Se inspecciona el bloque try que la engloba ms
cercano, para ver si tiene la clusula catch cuyo tipocoincide con el del objeto o instancia Throwable. Si se
encuentra, el control se transfiere a esa sentencia. Si no, se
inspecciona el siguiente bloque try que la engloba, y as
sucesivamente, hasta que el gestor de excepciones ms
externo detiene el programa y saca por pantalla el trazado delo que hay en la pila hasta que se alcanz la sentencia throw.
8/7/2019 10 Manejo de Excepciones
27/28
27
Propagacin de excepciones
La sentencia throws
La palabra clave throws se utiliza para identificar la lista
posible de excepciones que un mtodo puede lanzar.
La sentencia throws obliga al quin invoque el mtodo usar
un bloque trycatch o propagarlo con otro throws.
8/7/2019 10 Manejo de Excepciones
28/28
28
Creacin de clases de Excepciones
class MiExcepcion extends Exception {public MiException() { }
// si se quiere mostrar un cierto mensaje
// se debe definir este segundo constructor
public MiException(String msg) {
super(msg);
}
}
Se debe definir una nueva clase subclase de la clase
Exception.