Tema 14:
Excepciones
0
Excepción
z Definición
z Las Excepciones son objetos que
definen el estado de la aplicación
cuando se producen situaciones
anómalas.
z Son un mecanismo usado por
muchos lenguajes de programación
para describir que hacer cuando
inesperado sucede.
Mónica E. García García Feb ‘07 1
Tipos de excepciones
z Exceptions
3Checked
– Son aquellas que ocurren de manera
externa cuando el programa esta
trabajando. Por ejemplo al intentar
accesar a un archivo que no es
localizado o la falla de red.
3Unchecked
– Runtime exceptions.
Por ejemplo el intentar acceder a
una localidad mas alla de la del fin del
array (errores en diseño e
implementación.
– Errors
Son aquellas excepciones que son
raras y difíciles de recuperarse de
ellas como lo es “correr” fuera del
rango de memoria.
Mónica E. García García Feb ‘07 2
Jerarquía de clases
z [Link]
+----[Link]
|
+----[Link]
|
+----[Link]
|
+----[Link]
|...
+----[Link]
...
+----[Link]
|
+----[Link]
|. . .
+----[Link]
+----[Link]
| (uncheked)
+----[Link]
| ...
+----[Link] 3
Excepciones en
tiempo de ejecución
z [Link]
[Link]
//se ejecuta “[Link]” para una variable x con
valor null.
[Link]
//acceso a un índice no existente en un array.
[Link]
//división por cero
[Link]
//error de casting.
Mónica E. García García Feb ‘07 4
Bloques try-catch y
finally
z El bloque try-catch-finally permite
capturar una excepción.
z finally es opcional. Pero siempre se
ejecutará exista o no excepción.
z Si hay varias partes catch se ejecuta
la primera posible. El “catch” utiliza
la clase dinámica.
z Es posible uso de try-finally (sin
catch), aunque no se puede usar
“try” solo.
Mónica E. García García Feb ‘07 5
Bloques try-catch y
finally
z Sintaxis
try{
//Acciones susceptibles a excepción
}catch(Excepcion1 var1) {
// acción cuando se atrapa la
excepción
} catch(Excepcion2 var2) {
// acción cuando se atrapa la
excepción de mayor jerarquía
}
finally{
// acción que se cumple ocurra o no
una excepción
}
Mónica E. García García Feb ‘07 6
Propagación de
excepciones
z Si ningún método hasta el main atrapa
una excepción “e”, se llama a
[Link]() (método de
[Link])
Mónica E. García García Feb ‘07 7
Propagación de
excepciones
z .
Mónica E. García García Feb ‘07 8
Atrapando
excepciones
Ejemplo:
public class TestExcepciones{
public static void main(String arg[]){
int datos[] = new int[5];
try{
datos[6] = 7;
}
catch(ArrayIndexOutOfBoundsException
e){
[Link]("Indice fuera de
limites: ");
}
[Link]("Sigue por aqui");
}
}
Mónica E. García García Feb ‘07 9
Atrapando
excepciones 2
Ejemplo:
class Ejemplo {
public static void main(String args[]) {
Ejemplo p = new Ejemplo();
p.g();
[Link]("Final de método
main");
}
void f (String s) {
[Link]([Link]());
[Link]("Final de método f");
}
Mónica E. García García Feb ‘07 10
... Ejemplo
void g () {
try {
[Link]("Antes de f(null)");
f(null);
[Link]("Despues de f(null)");
} catch (NullPointerException e) {
[Link]("Excepcion de apuntado
nulo");
} catch (IndexOutOfBoundsException e){
[Link]("Excepcion de indice
erroneo");
}
finally {
[Link]("Final de bloque try");
}
[Link]("Final de método g");
}
} // de la clase Ejemplo
Mónica E. García García Feb ‘07 11
Ventajas
z Beneficios (errores y/o situaciones
anómalas):
1) Separación entre errores y código normal
2) Propagación de errores en la pila de
métodos a ejecutar.
3) Agrupación de tipos de errores y
diferenciación
z Se evita la alternativa en
programación del uso de muchos if o
if’s anidados
Mónica E. García García Feb ‘07 12
Excepciones definidas
en un programa
z Se aconseja su uso para situaciones
de prueba y depuración.
z Ventajas:
3 Permiten documentar mejor el
programa.
3 Permiten discriminar por medio de
varios bloques catch consecutivos.
3 Permiten transportar datos adicionales
desde donde se crean a donde se
capturan.
z Lo mejor es crearlas como
excepciones comprobadas (heredan
de Exception pero no de
RunTimeException)
Mónica E. García García Feb ‘07 13
throws
z throws permite cualquier objeto
“Throwable”, aunque generamente
se usa sólo para las Exception.
z Evitar errores de compilación:
3 Cuando un método puede lanzar una
excepción comprobada se debe
especificar en su cabecera con la
keyword throws.
3 Ejemplo:
void metodoUno throws IOException{
// acciones
}
Mónica E. García García Feb ‘07 14
throw
z throw permite indicar el lanzamiento de
una excepción creada por el
programador.
z La condición necesaria cuando se crea
una excepción propia, es que esta clase
herede de Exception
3Ejemplo:
class miExcepcion extends Exception{
// acciones
void metodoUno throws miExcepcion{
// acciones
if ( ! exito) {
throw new miException(“Error en
acceso al dato”);
}
}
}
Mónica E. García García Feb ‘07 15
Ejemplo
class Exception2D extends Exception {
public Exception2D (String mensaje) {
super(mensaje);
}
}
// Si algún método (como el main) crea Rectas, deberá
// o bien hacer throws de Exception2D o bien
// atrapar la excepción con bloque try-catch
class Recta2D {
private Punto2D p1, p2;
private void crearRecta2D (Punto2D p1, Punto2D p2) {
this.p1=p1;
this.p2=p2; }
// Recta a partir de dos puntos
public Recta2D (Punto2D p1, Punto2D p2)
throws Exception2D {
if ([Link](p2)) // definido en clase Punto2D
throw new Exception2D("Una recta se crea con”
+ “dos puntos distintos");
else crearRecta2D(p1, p2);
} Mónica E. García García Feb ‘07 16
...Ejemplo
// Para una recta ax+by+c=0
public Recta2D (double a, double b, double c) throws
Exception2D {
if (a==0 && b==0)
throw new Exception2D("En una recta no puede ”
+ “ser a=b=0");
else if (a==0)
crearRecta2D(new Punto2D(0, -c/b),
new Punto2D(1, -c/b));
else if (b==0)
crearRecta2D(new Punto2D(-c/a, 0),
new Punto2D(-c/a, 1));
else
crearRecta2D(new Punto2D(0, -c/b),
new Punto2D(-c/a, 0));
}
public Punto2D interseccion (Recta2D recta) throws
Exception2D {
.... throw new Exception2D(“Rectas paralelas o “
+ “coincidentes”);
....
Mónica E. García García Feb ‘07 17