programación interactiva manejo de excepciones escuela de ingeniería de sistemas y computación...

25
Programación Programación Interactiva Interactiva Manejo de Excepciones Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

Upload: elisa-pereyra-fuentes

Post on 23-Jan-2016

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

Programación InteractivaProgramación InteractivaManejo de ExcepcionesManejo de Excepciones

Escuela de Ingeniería de Sistemas y ComputaciónFacultad de IngenieríaUniversidad del Valle

Page 2: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

2

¿Qué es una excepción?¿Qué es una excepción?

Las excepciones son las formas en que los programas de Java manejan los diferentes errores que pueden ocurrir. Puede pensarse en una excepción como en un “error”.

Cuando una excepción ocurre decimos que fue “lanzada”, y cuando manejamos dicha excepción, es decir hacemos algo al respecto del error, decimos que fue “capturada”

Ejemplos de excepciones son: Tratar de convertir la cadena “123A4” a número Tratar de llamar a un método no estático de una referencia

null

Page 3: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

3

¿Qué es una excepción?¿Qué es una excepción? Para capturar excepciones en un bloque de código susceptible

debemos usar usar un bloque try..catch, que radica en un bloque de instrucciones en el que se capturarán las excepciones ( try), y uno o más bloques de manejo de excepciones (catch)

Por ejemplo:try {

// sentencias a monitorear el error}catch (tipoexcepcion nombrevar) {

// sentencias de manejo de la excepción}finally {

//sentencias a ejecutar ocurran o no excepciones}

Una o más

Opcional

Page 4: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

4

¿Qué es una excepción?¿Qué es una excepción?

Por ejemplo:

try {int i = Integer.parseInt(“123A4”);

} catch (NumberFormatException nfe) {System.out.println(“El formato del número es erroneo”);

}

Page 5: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

5

Ejemplo prácticoEjemplo práctico

try {String input = JOptionPane.showInputDialog(“Digite un “+

“número:”);int i = Integer.parseInt(input);System.out.println(“El número es ”+i);

} catch (NumberFormatException nfe) {System.out.println(“El formato del número es erroneo”);

} catch (NullPointerException npe) {System.out.println(“Usted no ha digitado ningún número”);

}

Este código pediría al usuario un número, en el caso de que el número sea válido, el programa imprime el primer mensaje.

Si el número es inválido, el segundo mensaje es mostrado.

Y si el usuario cierra el cuadro de dialogo (caso en el cual showInputDialog retorna null), entonces el tercer mensaje sería mostrado.

Page 6: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

6

Excepciones no tratadasExcepciones no tratadas

Cuando en un programa se arroja una excepción y esta no es capturada, la excpeción supera los límites del programa y es capturada por la JVM, mostrando un mensaje parecido a este:

Exception in thread "main“java.lang.NullPointerException

at MiClase.main(MiClase.java:17)

Page 7: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

7

¿Cómo arrojar una excepción?¿Cómo arrojar una excepción?

En ocasiones no solo debemos capturar excepciones predefinidas, sino que debemos crear nuestras propias excepciones y arrojarlas.

Para arrojar una excepción debe usarse la palabra reservada throw, que funciona se usa así:

…if (elNumeroNoMeGustó)

throw new NumberFormatException()…

En el ejemplo estamos arrojamos una de las excepciones predefinidas que es usada para informar de errores en el formato de conversiones de String a número.

Page 8: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

8

Tipos de excepcionesTipos de excepciones

Pueden distinguirse dos tipos de excepciones: Runtime Exceptions: Son excepciones que se producen en el

sistema de ejecución de Java. Tal como usar referencias null, hacer una dividisión entre cero, acceder a un elemento inexistente en un array.

NonRuntime Exceptions: Son excepciones que se producen fuera del sistema de ejecución de Java. Son ejemplo de estas las excepciones que se producen por acceso a archivos (IOExceptions)

En el segundo tipo de excepciones el compilador se asegura de que el programador maneje la excepción (es decir, que cree un bloque try…catch)

Page 9: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

9

Tipos de excepcionesTipos de excepciones

La manera de distinguir ambos tipos de excepciones es mediante la clase de las que estas extienden (si, todas las excepciones son clases).

Las excepciones del tipo Runtime deben extender de la clase RuntimeException, mientras lsas de tiopo NonRuntime deben extender de Exception.

Page 10: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

10

ErroresErrores Además de las excepciones, en Java existen los Errores, clases

parecidas a las excepciones, pero su objetivo es informar de una situación anormal grave, algo así como situaciones que nunca debieron ocurrir.

Son ejemplos de errores las clases: ThreadDeath VirtualMachineError AssertionError

Debido a que los Errores son “inesperados”, el compilador no exige al compilador que los capture.

Todos los Errores deben extender de la clase Error

Page 11: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

11

Excepciones NonRuntimeExcepciones NonRuntime Si tratáramos de compilar una clase que tuviera el siguiente

método:

El compilador nos daría este error

public boolean abreArchivo() {new FileInputStream(“archivo.txt”);return true;

}

unreported exception java.io.FileNotFoundException;must be caught or declared to be thrown

Debido a que no estamos capturando la excepción FileNotFoundException que puede ser lanzada

Page 12: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

12

Excepciones NonRuntimeExcepciones NonRuntime Para librarnos del problema tenemos dos opciones:

Capturar la excepción:

public boolean abreArchivo() {try {

new FileInputStream(“archivo.txt”);return true;

} catch (IOException ioe) {return false;

}}

O indicar en la declaración del método, que la excepción puede ser lanzada:

public boolean abreArchivo() throws IOException {new FileInputStream(“archivo.txt”);return true;

}

Page 13: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

13

Arrojando ExcepcionesArrojando Excepciones Para arrojar una excepción debemos usar la palabra throw

seguida de un objeto del tipo Excepción (o Error)

Esto es útil cuando queremos informar al programa invocador que ocurrió una situación anómala en nuestro código

Por ejemplo:

public boolean debitarCuenta (int valor)throws InvalidAmountException {…if (balance+sobregiro+sobrecanje < valor)

throw new InvalidAmountException()…

}

Page 14: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

14

Creación de ExcepcionesCreación de Excepciones

public class InvalidAmountException extends RuntimeException {}

public class InvalidAmountException extends Exception {}

Podemos crear una excepción tan solo creando una clase que extienda de otra excepción ya existente:

Y como es una clase, podemos colocar cualquier método y atributo que se nos ocurra:

public class InvalidAmountException extends RuntimeException{

protected int valorInvalido;public InvalidAmountException(int valorInvalido) {

this.valorInvalido = valorInvalido;}public int getValorInvalido() {

return valorInvalido;}

}

Page 15: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

15

Excepciones comunesExcepciones comunes

CloneNotSupportedException: No se pudo copiar un objeto mediante clone().

IllegalAccessException: Algún método invocado es no visible.

InstantiationException: Se ha intentado instanciar una interfaz o una clase abstracta.

Page 16: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

16

Excepciones comunesExcepciones comunes

InterruptedException: Cuando se invoca a interrupt() sobre un thread dormido.

NoSuchFieldException: La clase no tiene un atributo con ese nombre.

NoSuchMethodException: La clase no tiene un método con ese nombre.

Page 17: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

17

Excepciones comunes (RTE)Excepciones comunes (RTE)

IOException Generalmente fallas de entrada o salida, tal como la inhabilidad de leer desde un archivo.

NullPointerException: Referencia a un objeto NULL

NumberFormatException: Una conversión fallida entre Strings y números

OutOfMemoryException: Muy poca memoria para instanciar un objeto nuevo (new)

Page 18: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

18

Excepciones comunes (RTE)Excepciones comunes (RTE)

SecurityException: Un applet tratando de realizar una acción no permitida por la configuración de seguridad del browser

StackOverflowException: El sistema corriendo fuera de espacio en Stack (stack space)

ArrayIndexOutOfBoundsException: Un programa tratando de almacenar, el tipo de índice erróneo, de datos en un arreglo.

FileNotFoundException: Un intento de acceder a un archivo que no existe.

Page 19: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

19

Excepciones comunes (RTE)Excepciones comunes (RTE)

ArithmeticException: Errores Matemáticos, como división por cero.

ArrayStoreException: Intento de almacenar un objeto equivocado en un vector.

IllegalArgumentException: Se ha pasado un argumento inválido a un método: IllegalThreadStateException: Un thread no estaba en el

estado adecuado. NumberFormatException: Una cadena contenedora de un

número, no lo contiene.

Page 20: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

20

Excepciones comunes (RTE)Excepciones comunes (RTE)

ClassCastException: Intento de conversión inválida.

IllegalMonitorStateException: Se ha usado wait/notify fuera de código sincronizado.

IndexOutOfBoundsException: Acceso a un vector fuera de sus límites: ArrayIndexOutOfBoundsException: Idem, para una

matriz. StringIndexOutOfBoundsException: Idem, para una

cadena.

Page 21: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

21

Excepciones comunes (RTE)Excepciones comunes (RTE)

IllegalStateException: Método invocado en un momento inapropiado.

NegativeArraySizeException: Intento de creación de un vector de tamaño negativo.

UnsupportedOperationException: Una operación invocada no se soporta.

Page 22: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

22

Errores comunesErrores comunes

LinkageError: Una clase no satisface la dependencia que tiene respecto a otra. ClassCircularityError: Se detectó una herencia circular

entre clases. ClassFormatError: Una clase cargada no ha sido

incompletamente descrita.o UnsupportedClassVersionError: La versión de una

clase no es correcta. ExceptionInInitializerError: Error al iniciar un miembro

static.

Page 23: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

23

Errores comunesErrores comunes

IncompatibleClassChangeError: En una clase, su interfaz no es igual al declarado

AbstractMethodError: Se ha invocado un método abstracto.

IllegalAccessError: La aplicación intentó acceder a algún miembro no visible.

InstantiationError: Se intentó instanciar una clase abstracta o interfaz.

NoSuchFieldError: No se encontró determinado aributo.

NoSuchMethodError: No se encontró determinado método.

Page 24: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

24

Errores comunesErrores comunes

NoClassDefFoundError: No se encontró una clase cuando se necesitaba.

UnsatisfiedLinkError: Se encontró un enlace insatisfecho en un método nativo.

VerifyError: Se ha producido un error de verificación al cargar una clase.

ThreadDeath: Se ha lanzado en el thread víctima tras llamar a stop().

Page 25: Programación Interactiva Manejo de Excepciones Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle

25

Errores comunesErrores comunes

VirtualMachineError: La máquina virtual se ha averiado o quedado sin recursos. InternalError: Error interno en tiempo de ejecución. OutOfMemoryError: El lector ha agotado la memoria. StackOverflowError: Desbordamiento de pila. ¿Recursión

infinita?. UnknownError: Grave error desconocido..