manejo de erroreshorarioscentros.uned.es/archivos_publicos/qdocente...manejo de errores 1 consiste...
TRANSCRIPT
MANEJO DE ERRORES
1
� Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador deberá contemplar esos errores.
� Uno de los puntos más vulnerables son los parámetros que se pasan a constructores y métodos de los objetos. Esos parámetros deberán ser comprobados para evitar funcionamientos erróneos.funcionamientos erróneos.
� Cuando se detecta un error hay dos posibles enfoques de notificación:
o Notificar al usuario.o Notificar al objeto cliente. Dos maneras:
� Devolver un valor que indique que se ha producido un error durante el proceso (false, -1, null,..)
� Lanzando una excepciónexcepciónexcepciónexcepción desde el método en el que se ha producido el error.
2
� Una excepción es un objeto que representa los detalles de un fallo de un programa.
� Se lanza una excepción para indicar que se ha producido un fallo.
� Para lanzar una excepción usaremos la palabra reservada throw .
� Lo que lanzamos es un objeto de una de las clases de excepción.
if (clave == null){throw new NullPointerException(“Mensaje de error”);
}
3
� Un objeto de excepción es siempre una instancia de una clase de una jerarquía de herencia especial.
� Podemos crear nuevos tipos de excepción creando subclases en esta jerarquía.
� Java divide las excepciones en:� Excepciones comprobadas: normalmente
supondrán errores de programación
esperados.
� Excepciones no comprobadas:
generalmente indican un error de
programa.
4
� Cuando se lanza una excepción la ejecución del método que la disparó termina inmediatamente.
5
� Tipo de excepción cuyo uso no requerirá controles por parte del compilador.
� Mas fáciles de usar dado que el compilador impone muy pocas reglas para su uso.impone muy pocas reglas para su uso.
� Una de las mas comunes son excepciones en tiempo de ejecución. Si dicha excepción no es capturada la aplicación se cerrará como consecuencia del error.
6
� Las excepciones comprobadas excepciones comprobadas excepciones comprobadas excepciones comprobadas son un tipo de excepción cuyo uso requiere controles adicionales del compilador.
� Estas excepciones requieren del uso de cláusulas throws y de sentencias try .
� Un método que lanza excepciones deberá agregar en su encabezado un indicador que que lanza un determinado tipo de excepciones, para ello usa la palabra throws:
pubic void grabarEnArchivo(String archivo)throws IOException { ….}
7
� Si un método invoca a otro método que lanza excepciones el compilador nos va a obligar a incluir un bloque manejador de excepciones.
� El manejador de excepciones proporciona información y/o código para recuperarse del información y/o código para recuperarse del error.
try {//Sentencias que pueden producir una excepción.
catch (Exception e){//Sentencias de información o recuperación
}
8
� Un método puede lanzar excepciones de varios tipos.
� En la definición del método se indicará que tipos de excepciones lanza.tipos de excepciones lanza.
public void proceser()
throws EOException, FileNotFoundException {…}
9
� Podemos generar manejadores de excepciones que reaccionen de distinta manera según sea el tipo de excepción.
try {
//Sentencias que pueden producir una excepción.
catch ( EOException e){catch ( EOException e){
//Medidas necesarias para atender una excepción de
//fin de fichero.
} catch (FileNotFoundException e){
//Medidas necesarias para atender una excepción de
//fichero no encontrado.
} catch (Exception e){
//Medidas para atender excepción que no pertenezcan
//a uno de los dos tipos de excepción anteriores.
}
10
� El compilador nos obliga a incluir un manejador de excepciones cuando se llama a un método que puede producir una excepción.
� Si no deseamos que sea el método que estamos escribiendo el que maneje esa excepción podemos propagarla indicando que nuestro método a su vez throws los tipos de excepciones que recibe.
11
� Podemos completar nuestro manejador de excepciones con una cláusula finally.
� El código que se incluya en dicho bloque se ejecutará independientemente de que se produzca una excepción o no.produzca una excepción o no.
try {//Sentencias que puede producir una excepción.
} catch (Exception e){//Sentencias que atienden la excepción.
} finally {//Acciones comunes independientemente de que se//produzca excepción o no.
}
12
� Podemos definir nuestras propias clases de excepción creando subclases de los tipos de excepción de java.
public class miTipoExcepcion extends Exception {public class miTipoExcepcion extends Exception {
public miTipoExcepcion (String error){
super(error);
}
}
13
� Una aserción es la afirmación de un hecho que debe ser verdadero en la ejecución normal del programa.
� Podemos usar aserciones para establecer � Podemos usar aserciones para establecer explícitamente lo que asumimos y para detectar errores de programación más fácilmente.
assert !claveEnUso(clave);
assert tamañoConsistente;
14
� La serialización de objetos permite leer y escribir objetos y jerarquias de objetos en una única operación.
� Cada objeto involucrado debe ser de una � Cada objeto involucrado debe ser de una clase que implemente el interfaz Serilizable .
15
� El siguiente ejemplo muestra como realizar la seriación de objetos hacia fichero.
FileOutputStream fos = new FileOutputStream(“datos”);
ObjectOutpusStream oos = new ObjectOutputStream(fos);
oos.writeUTF(“Fichero de datos”);
oos.writeObject(new CPersona(nombre,dirección,teléf ono));
oos.Close();
16
� El siguiente ejemplo muestra como extraer del fichero los objetos guardados previamente.
FileInputSream fin = new FileInputStream (“ datos ”);FileInputSream fin = new FileInputStream (“ datos ”);
ObjectInputStream ois = new ObjectInputStream(fis);
String srt = (String)ois.readUTF();
CPersona persona = (CPersona)ois.readObject();
ois.close();
17