Você está na página 1de 16

Excepciones

Programacin Orientada a Objetos

Las excepciones son la manera que ofrece


un programa de manejar los errores en
tiempo de ejecucin.
Muchos lenguajes imperativos simplemente
detienen la ejecucin de programa cuando
surge un error.
Las excepciones nos permiten escribir
cdigo que nos permita manejar el error y
continuar (si lo estimamos conveniente) con
la ejecucin del programa.

Ejemplo
public class D esbordam iento {
public static void m ain(String[] args) {
Static String m ensajes[] =
{"Prim ero","Segundo","Tercero" };
for(int i= 0; i< = 3; i+ + )
System .out.println(m ensajes[i]);
}
}

Estructura: try ... catch ... finally


La estructura try-catch-finally nos permite
capturar excepciones, es decir, reaccionar a
un error de ejecucin.
De este modo se puede imprimir mensajes
de error "a la medida" y continuar con la
ejecucin del programa si consideramos que
el error no es demasiado grave.

Estructura: try ... catch ... finally


try {
// Cdigo que puede hacer que se
eleve la excepcin
}
catch(TipoExcepcion e) {
// G estor de la excepcin
}

p u b lic class Ejem p loC atch {


p u b lic static void m ain (S trin g [] arg s) {
S trin g m en sajes[] = { "P rim ero", "S eg u n d o",
"Tercero" } ;
try {
for(in t i = 0; i < = 3; i+ + )
S ystem .ou t.p rin tln (m en sajes[i]);
}
catch
( A rrayIn d exO u tO fB ou n d sExcep tion e ) {
S ystem .ou t.p rin tln ("S e h an
d esb ord ad o los
m en sajes");
}
fn
i ally {
S ystem .ou t.p rin tln ("H a
fn
i alizad o la

try
o
o

El bloque de cdigo donde se prev que se eleve


una excepcin.
El bloque try tiene que ir seguido, al menos, por
una clusula catch o una clusula finally.

catch
o
o
o

Es el cdigo que se ejecuta cuando se eleva la


excepcin.
Controla cualquier excepcin que cuadre con su
argumento.
Se pueden colocar varios catch sucesivos, cada uno
controlando un tipo de excepcin diferente.

finally
o

Bloque que se ejecuta siempre, haya o no


excepcin.

Jerarqua de excepciones

Clases de excepciones
Throwable
o

Superclase que engloba a todas las excepciones

Error
o
o

Representa los errores graves causados por el


sistema (JVM, ...)
No son tratados por los programas.

Exception
o
o

Define las excepciones que los programas deberan


tratar
(IOException, ArithmeticException, etctera).

La clase Exception
Cuando se eleva una excepcin, lo que se
hace es activar un ejemplar de Exception o
de alguna de sus subclases.
Normalmente las clases derivadas nos
permiten distinguir entre los distintos tipos
de excepciones.

Excepciones predefinidas

Captura de excepciones
Al catch le sigue, entre parntesis, la
declaracin de una excepcin.
Es decir, el nombre de una clase derivada
de Exception (o la propia Exception)
seguido del nombre de una variable.
Si se lanza una excepcin que es la que
deseamos capturar (o una derivada de la
misma) se ejecutar el cdigo que contiene
el bloque.
Ejemplo:
o

catch (Excep tion e) { ... }

Captura de excepciones
Se pueden colocar varios bloques catch.
o
o
o

Si es as, se comprobar, en el mismo orden en que


se encuentren esos bloques catch
Si la excepcin elevada es la que se trata en el
bloque catch;se dispara la excepcin
Si no, se pasa a comprobar el siguiente.

Slo se ejecuta un bloque catch. En cuanto


se captura la excepcin se deja de
comprobar el resto de los bloques.

Lanzamiento Explicito de
Excepciones
Los mtodos en los que se puede producir
un error deben avisar al compilador de que
ste se puede producir.
o

Para ello se utiliza la clusula th row s.

Ejemplo
un mtodo de lectura de un archivo podra elevar
una excepcin de tipo IOException:
public String leer(FileInputStream archivo) throw s
IO Exception
{ // ...
o

Se pueden elevar varias excepciones en un


mismo mtodo

Las excepciones en los mtodos se lanzan


con la instruccin throw.
public String leerD atos(D ataInput archivo)
throw s EO FException {
//
w hile( /* ... */ ) {
if(ch = = -1) { // Fin de archivo
if(n < longitud)
throw new EO FException();
}
}
return s;
}

Ventajas de las Excepciones


Separacin del tratamiento de errores del
resto del cdigo del programa.
o
o

Evitar manejo de cdigos de error.


Evitar la alteracin explcita del control de flujo.

Propagacin de errores a travs de la pila


de llamadas mtodos.
o
o

Evitar el retorno de valores de error.


Evita la utilizacin de argumentos adicionales.

Agrupamiento de tipos de errores,


diferenciacin de tipos de errores.
o
o

Jerarqua de clases de excepciones.


Tratar los errores a nivel de especificidad deseado.

Você também pode gostar