Publicado el 6 de Junio del 2017
819 visualizaciones desde el 6 de Junio del 2017
268,1 KB
16 paginas
Creado hace 15a (05/05/2009)
UNIVERSIDAD
DE CANTABRIA
Fundamentos de Computadores y
Lenguajes
1. Elementos básicos de los lenguajes
2. Instrucciones de control
3. Tipos de datos
4. Métodos
5. Modularidad y Abstracción
6. Tratamiento de errores
7. Entrada/salida simple
8. Entrada/salida con ficheros
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
4
© Michael González Harbour
5/ma/09
1
UNIVERSIDAD
DE CANTABRIA
Fundamentos de Computadores y
Lenguajes
6. Tratamiento de errores
• 1. Tratamiento de errores por paso de parámetros
• 2. Excepciones
• 3. Bloques de tratamiento de excepciones
• 4. Errores o excepciones predefinidos
• 5. Instrucciones try anidadas
• 6. Lanzar excepciones
• 7. Usar tus propias excepciones
• 8. La cláusula finally
• 9. Principales formas de gestión de errores
• 10. Cuándo usar excepciones
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
2
1. Tratamiento de errores por paso de
parámetros
En los lenguajes de programación más antiguos (C, Fortran, ...)
Cada método o función retorna un valor
• generalmente un código numérico indicando si había habido
UNIVERSIDAD
DE CANTABRIA
error o no, y cuál
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
3
Ejemplo de tratamiento de errores por
paso de parámetros
UNIVERSIDAD
DE CANTABRIA
error=funcion1(...);
if (error==1) {
mostrar mensaje error 1;
} else if (error==2) {
mostrar mensaje error 2;
} else {
error=funcion2(..);
if (error==1) {
mostrar mensaje error 1;
} else if (error==3) {
mostrar mensaje error 3;
} else {
...
}
}
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
4
Inconvenientes
• el código de chequeo de error aparece por todas partes,
mezclado con el código normal
UNIVERSIDAD
DE CANTABRIA
• en muchos casos el chequeo de error se omite por “pereza” o
desconocimiento
-
lleva a situaciones de error que pasan inadvertidas
funcion1();
funcion2();
...
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
5
2. Excepciones
Son un mecanismo especial para gestionar errores
• Separan claramente el tratamiento de errores del código normal
• Evitan que haya errores que pasen inadvertidos
• Propagan de forma automática los errores desde los métodos
UNIVERSIDAD
DE CANTABRIA
más internos a los más externos
• Permiten agrupar en un lugar común el tratamiento de errores
que ocurren en varios lugares del programa
Las excepciones se lanzan para avisar de un error:
• automáticamente, cuando el sistema detecta un error
• explícitamente cuando el programador lo establezca
Presentes en lenguajes modernos (Java, Ada, C++,...)
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
6
Ejemplo de bloque de tratamiento de
excepciones
UNIVERSIDAD
DE CANTABRIA
try {
funcion1();
funcion2();
...
} catch (error e) {
tratamiento del error;
}
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
7
Mecanismo
Las excepciones en Java son objetos de una clase extendida de
otra clase especial llamada Throwable.
Cuando ocurre un error en una línea de código:
• Se crea una instancia de la excepción, y se lanza (throw) la
excepción
UNIVERSIDAD
DE CANTABRIA
• El bloque que contiene esa línea de código se aborta en ese
momento
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
8
Mecanismo (cont.)
• El bloque donde ocurre la excepción puede decidir tratarla
(catch) o dejarla pasar
- Si se trata, se ejecutan las instrucciones de un manejador, la
situación de error termina, y se sigue por el siguiente bloque
UNIVERSIDAD
DE CANTABRIA
• Si se deja pasar, el siguiente bloque puede a su vez tratarla o
dejarla pasar
- Si nadie la trata, el programa se interrumpe y aparece un mensaje
de error
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
9
Ejemplo de elevación implícita: División
por cero
UNIVERSIDAD
DE CANTABRIA
import fundamentos.*;
public class DivisionCero {
public static void main(String[] args) {
int i,j;
Lectura leer=new Lectura ("Enteros");
leer.creaEntrada("i",0);
leer.creaEntrada("j",0);
leer.espera("introduce datos");
i=leer.leeInt("i");
j=leer.leeInt("j");
System.out.println("i/j="+i/j);
System.out.println("Fin del programa");
} // main
} // DivisionCero
Cuando j vale 0 se lanza
ArithmeticException
Cuando se eleva la excep-
ción esta línea no se ejecuta
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
10
3. Bloques de tratamiento excepciones
La forma general de escribir un bloque en el que se tratan
excepciones es:
UNIVERSIDAD
DE CANTABRIA
try {
instrucciones;
} catch (ClaseExcepcion1 e) {
instrucciones de tratamiento;
} catch (ClaseExcepcion2 e) {
instrucciones de tratamiento;
}
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
11
Ejemplo: división por cero con
tratamiento
UNIVERSIDAD
DE CANTABRIA
int i,j;
Lectura leer=new Lectura ("Enteros");
try {
leer.creaEntrada("i",0);
leer.creaEntrada("j",0);
leer.espera("introduce datos");
i=leer.leeInt("i");
j=leer.leeInt("j");
System.out.println("i/j="+i/j);
} catch (ArithmeticException e) {
Mensaje error = new Mensaje();
error.escribe("Detectada excepcion: "+e);
}
System.out.println("Fin del programa");
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
12
Tratamiento general
Es posible poner un tratamiento específico para una excepción,
como en el ejemplo, o uno general:
UNIVERSIDAD
DE CANTABRIA
} catch (Exception e) {
instrucciones de tratamiento;
}
El tratamiento general es cómodo pero no es recomendable,
• puede ocurrir un tratamiento inadecuado para una excepción no
prevista
Las excepciones se pueden concatenar a un String
• lo que las transforma en texto que describe el error
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
13
4. Errores o excepciones predefinidos
Jerarquía de las excepciones
UNIVERSIDAD
DE CANTABRIA
Throwable
se pueden
tratar
no se tratan
Exception
Error
no es
obligatorio
tratarlas
RuntimeException
ExcepcionUsuario
es
obligatorio
tratarlas
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
14
Algunas excepciones no comprobadas
(clase RuntimeException)
UNIVERSIDAD
DE CANTABRIA
ArithmeticException
ArrayIndexOutOfBoundsException Índice de array fuera de límites
Error aritmético (x/0, ...)
ArrayStoreException
IllegalArgumentException
IndexOutOfBoundsException
NegativeArraySizeException
NullPointerException
NumberFormatException
StringIndexOutOfBounds
(<0 o >=length)
Tipo incorrecto al crear un array
Argumento ilegal en la llamada a
un método
Indice fuera de límites (p.e., en
un ArrayList)
Tamaño de array negativo
Uso de una referencia nula
Formato de número incorrecto
Indice usado en un String está
fuera de límites
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
15
5. Instrucciones try anidadas
Las instrucciones try se pueden anidar cada tratamiento trata las
excepciones de su bloque
Si la excepción no se trata se le pasa al bloque de fuera
El anidamiento puede ser explícito, como en el ejemplo, o implícito
en la llamada a un método.
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
16
Sintaxis de las instrucciones try
anidadas
UNIVERSIDAD
DE CANTABRIA
try {
instrucciones;
try {
instrucciones;
} catch (Exception e) {
manejador;
} // try interno
más instrucciones;
} catch (Exception e) {
otro manejador;
} // try externo
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
17
UNIVERSIDAD
DE CANTABRIA
6. Lanzar excepciones
Se pueden lanzar con:
throw objetoExcepcion;
throw new NombreExcepcion();
Y si es predefinida
throw new NombreExcepcion("mensaje");
Ejemplo:
...
if (clave==null) {
throw new NullPointerException
("clave es nula");
}
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
18
Lanzar la misma excepción
En ocasiones se eleva en un manejador la misma excepción:
UNIVERSIDAD
DE CANTABRIA
catch (Exception e) {
System.out.println
("Detectada excepcion "+e);
throw e;
}
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
19
7. Usar tus propias excepciones
Puedes crear tus propias excepciones y utilizarlas para indicar
errores:
UNIVERSIDAD
DE CANTABRIA
public class MiExcepcion extends Exception {};
Y se pueden usar desde un método en otra clase:
public class ClaseMia {
public void metodo() {
try {
throw new MiExcepcion();
} catch (MiExcepcion e) {
System.out.println("excepcion "+e);
} // try
} // metodo
} // ClaseMia
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
20
Usar tus propias excepciones (cont.)
Si un método eleva una excepción que no sea RuntimeException
(p.e. una tuya), debe:
• tratarla
• o declararla con una cláusula "throws"
Sintaxis para cláusula throws
UNIVERSIDAD
DE CANTABRIA
public tipo nombreMetodo (parametros)
throws NombreExcepcion1, NombreExcepcion2
{
declaraciones;
instrucciones; // lanzan las excepciones
}
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
5/ma/09
21
UNIVERSIDAD
DE CANTABRIA
Ejemplo
Clase NoCa
Comentarios de: Fundamentos de Computadores y Lenguajes - 6. Tratamiento de errores (0)
No hay comentarios