Publicado el 9 de Noviembre del 2018
826 visualizaciones desde el 9 de Noviembre del 2018
217,5 KB
9 paginas
Creado hace 13a (13/10/2010)
Tema 2: Errores y Excepciones:
Modelo y Gestión
Germán Moltó
Escuela Técnica Superior de Ingeniería Informática
Uni ersidad Politécnica de Valencia
Universidad Politécnica de Valencia
1
Objetivos y Bibliografía
Objetivos y Bibliografía
Estudiar el tratamiento que se proporciona en Java a los errores
producidos durante la programación.
d id d
l
ió
Analizar la jerarquía de Excepciones y Errores en Java y su
representación como objetos de la clase Throwable
representación como objetos de la clase Throwable.
Aprender la sintaxis que proporciona Java para la creación y gestión
de excepciones, así como su propagación a otros métodos.
Bibliografía:
Capítulo 7 del libro de Wiener, R. Pinson, L.J. Fundamentals of
OOP and Data Structures in Java (Cambridge University Press,
2000)
2000).
3
Tema 2: Errores y Excepciones: Modelo y Gestión
Tema 2: Errores y Excepciones: Modelo y Gestión
Errores y Excepciones Durante la Ejecución de un Programa
ÍÍndice general:
1.
2. Gestión de Excepciones en Java
3.
Lanzamiento de Excepciones en Java
P
Propagación y Captura de Excepciones
ió C t
d E
i
4
4.
2
Modelización Java de la Jerarquía de
Errores y Excepciones
Errores y Excepciones
Estudio del tratamiento que da Java a los errores que se
q
q
J
producen al programar. En particular, se tratarán los
siguientes aspectos:
Errores como Objetos Throwable (del paquete java.lang).
Las subclases de Throwable: Error, Exception y Excepciones
de Usuario.
Lanzamiento y Propagación de Excepciones: excepciones
capturadas y no capturadas. Cláusula throw y throws.
d Clá
l th
th
d
t
t
Captura de Excepciones: Instrucción try-catch-finally.
Ej
Ejemplo:
l
Reformulación del tratamiento de errores realizado en
lasFiguras
lasFiguras
4
Situaciones Inesperadas en la Ejecución
(I)(I)
Situaciones inesperadas durante la ejecución:
Un método intenta leer o escribir en un fichero no accesible.
En el proyecto lasFiguras, al leer de teclado un círculo se le
asigna a su radio un carácter
asigna a su radio un carácter.
Se realiza una división por cero o se calcula la raíz cuadrada de
un valor negativo, o se accede a una posición inexistente de un
array o se accede a un objeto null, etc.
Se produce un fallo en la lógica de la aplicación, como en
lasFiguras al insertar una nueva figura en un grupo que ya está
lasFiguras al insertar una nueva figura en un grupo que ya está
lleno o intentar borrar una en un grupo donde no está.
Se agota la memoria del sistema o se accede a una zona no
permitida de ésta.
d d é
Si no realizamos una gestión de los situaciones
inesperadas el programa abortará abruptamente
inesperadas, el programa abortará abruptamente.
5
6
Situaciones Inesperadas en la Ejecución
(II)
(II)
Una buena aplicación debe prever y gestionar las
y g
p
p
situaciones inesperadas que pueden ocurrir en ejecución.
Debe como mínimo avisar de la situación producida y,
y,
p
siempre que sea posible, tratar de recuperarse para que
no afecte al normal desarrollo del programa.
p g
Tipos de Situaciones Inesperadas:
Errores Irrecuperables Agotamiento de Memoria
Errores Recuperables Resto de situaciones inesperadas.
p
g
Excepciones de Entrada / Salida
Excepción de Fallo de Programación
Excepción de Usuario
La Jerarquía Throwable
La Jerarquía Throwable
Obj
t
Object
Th
bl
Throwable
Extracto de la Jerquía de
Extracto de la Jerquía de
excepciones [API].
Error
Exception
RuntimeException
IOException
NullPointerException
Excepciones
de
de
Usuario
Mecanismo de Excepciones:
Generalidades
Generalidades
Las excepciones en Java modelan las situaciones
inesperadas.
Se corresponden con objetos de tipo Exception y se lanzan
d d l
)
desde los métodos (lo suelen indicar en su cabecera).
b
Clasificamos las excepciones en dos tipos:
é d (l
i di
l
1.
Excepciones propias de Java:
IOException: FileNotFoundException, UnknownHostException,
SocketException etc
SocketException, etc.
RuntimeException: ArithmeticException, ClassCastException,
NullPointerException, IllegalArgumentException, etc.
…
Excepciones de Usuario
2.
hereda de
hereda de
8
Creadas por el programador para su aplicación.
C d
ió
d
l
li
Definición de Excepciones de Usuario
Definición de Excepciones de Usuario
Las Excepciones de Usuario, que no pertenecen al
estándar de Java, deben ser incorporadas a la jerarquía de
la clase Exception.
Ejemplo:
Aplicación de gestión de un grupo de figuras donde se desea
f
l
notificar el error al tratar de insertar en un grupo lleno.
public class GrupoLlenoException extends Exception {
d
l
ll
public GrupoLlenoException(String mensaje) {
public GrupoLlenoException(String mensaje) {
super(mensaje);
}
public GrupoLlenoException() {
public GrupoLlenoException() {
super();
}
}
}
9
Métodos que Lanzan Excepciones
Métodos que Lanzan Excepciones
Por lo general, los métodos deben indicar en su
especificación las excepciones que pueden lanzar:
Utilizando la clausula throws (separadas por comas).
…
public void insertar(Figura f) throws GrupoLlenoException{
…
}
…
La excepción podrá ser lanzada dentro del código:
De forma explícita (creando un objeto de tipo compatible
con la excepción y lanzándolo), ó
Tras invocar a un método que la pueda lanzar
Tras invocar a un método que la pueda lanzar.
11
¿Cómo se crea una nueva excepción?
¿Cómo se crea una nueva excepción?
Una excepción es otro objeto más, por lo que se utiliza
de la misma manera:
Podemos especificar un mensaje adicional o no.
Podemos declarar una variable polimórfica cuyo tipo estático
sea Exception.
…
GrupoLlenoException ex = new GrupoLlenoException();
…
…
Exception ex = new GrupoLlenoException(“Completo!”);
Exception ex
new GrupoLlenoException( Completo! );
…
10
Ejemplo de Método que Lanza
Excepción: parseInt de Integer
Excepción: parseInt de Integer
El método parseInt de la clase Integer
p
g
Convierte una cadena que representa un número en un tipo
primitivo int.
Si la cadena no representa un número (i.e. “45” vs “kjd”), lanza
una excepción.
public class Integer {
…
public static int parseInt(String s) throws NumberFormatException
public static int parseInt(String s) throws NumberFormatException
{
if (s == null) throw new NumberFormatException("null");
… //Más adelante también puede lanzarse la excepción.
}
}}
Excepciones Comprobadas (I)
Excepciones Comprobadas (I)
Excepción Comprobada (checked):
Cuando un método h declara en su definición que propaga una
Excepción.
Al invocar al método h se debe capturar la excepción o
Al invocar al método h, se debe capturar la excepción o
propagarla. Sino, error al compilar.
q
Cualquier Excepción de Usuario es Comprobada.
Las RuntimeException nunca son excepciones
p
p
Comprobadas
Los métodos no están obligados a capturar o a propagar una
Tampoco están obligados a
Tampoco están obligados a
RuntimeException.
declarar que las lanzan
Ej.: nextDouble() de Scanner.
¿Por qué piensas que NO se obliga a
capturar las excepciones que son
s bclase de R ntimeE ception?
subclase de RuntimeException?
13
Mecanismo de Gestión de Excepciones
Mecanismo de Gestión de Excepciones
Invocar un método que lanza una excepción requiere una
de estas gestiones:
Capturar la excepción (gestionándola), ó
Propagar la excepción (indicándolo en su definición), ó
Capturar, gestionar y propagar la excepción.
La propagación de la excepción se hace en orden
inverso a la secuencia de llamadas realizada.
Hasta que las gestiona algún método o la JVM aborta.
15
Excepciones Comprobadas (II)
Excepciones Comprobadas (II)
Si un método especifica en su cabecera que lanza una
p
q
excepción, salvo que sea de tipo RuntimeException, los
métodos que lo invoquen están obligados a gestionarla.
Si el método h sobrescribe al p, h no puede propagar más
Excepciones Comprobadas que p.
p
p
p
q
Las Excepciones Comprobadas que lanza un método
p p g
deben ser de un tipo compatible al que declara propagar.
Es decir:
si se declara propagar una excepción de tipo E,
se deberá lanzar una excepción de tipo E o de cualquier
p
p
q
subclase de E.
14
Captura de Excepciones
Captura de Excepciones
try {
// código que puede lanzar las excepciones e1, e2, etc.
} catch (ExcepcionTipo1 e1) {
// código de gestión de e1, de tipo ExcepcionTipo1 o subclase de ésta.
} catch (ExcepcionTipo2 e2) {
// código de gestión de e2 de tipo ExcepcionTipo2 o subclase de ésta
// código de gestión de e2, de tipo ExcepcionTipo2 o subclase de ésta.
}finally {
/* Código que se ejecuta siempre, independientemente de que se
/ Código que se ejecuta siempre, independientemente de que se
produzca la excepcion. Sirve para hacer lo indispensable. */
}
Ya que todas las excepciones son subclases de Exception,
siempre se puede realizar un try-catch general de Exception y
ca t rar c al
e ce ción
capturar cualquier tipo excepción.
16
ier ti
Ejemplo de Excepciones (I): Propagación
Ejemplo de Excepciones (I): Propagación
• Diseñar un módulo de grabación (clase ModuloGrabacion) que utilice la
funcionalidad de GrabacionDVD.
public class GrabacionDVD {
public void grabar() throws ExcepcionEnGrabacion { … }
}
public class ModuloGrabacion {
GrabacionDVD grabDVD;
…
public void crearDVD() throws ExcepcionEnGrabacion {
…
grabDVD.grabar();
…
}}
17
Ejemplo de Excepciones (III): Captura y
Propagación
p g
public class GrabacionDVD {
public void grabar() throws ExcepcionEnGrabacion { … }
}
public class ModuloGrabacion {
GrabacionDVD grabDVD;
…
public void crearDVD() throws ExcepcionEnGrabacion{
try{try{
grabDVD.grabar();
(
}catch(ExcepcionE
Comentarios de: Tema 2: Errores y Excepciones: Modelo y Gestión (0)
No hay comentarios