2. Una excepción o un error es un evento que ocurre durante la ejecución de un programa y detiene el flujo normal de la secuencia de instrucciones de ese programa. Las excepciones en Java están destinadas a la detección y corrección de errores. Si hay un error, la aplicación debe lanzar una excepción ( throw ) que a su vez debería capturar ( catch ) y resolver la situación de error, o poder ser tratada finalmente ( finally ) por un gestor por defecto u omisión. Definición Las excepciones son formas muy limpias de manejar errores y problemas inesperados en la lógica del programa. Gestión de Errores
3. Tipos de Excepciones Exception: Conjunto de excepciones que el programa debe capturar y resolver. Subclases RuntimeException, ArithmeticException, IndexOutOfBoundsException, NullPointerException, etc. Gestión de Errores Error: Son fallos de tipo catastrófico, originan la parada del programa. Subclases AWTError, LinkageError, ThreadDeath, VirtualMachineError, etc.
4. Excepciones Predefinidas Los nombres de las excepciones indican la condición de error que representan. Las siguientes son las excepciones predefinidas más frecuentes que se pueden encontrar: ArithmeticException Las excepciones aritméticas son típicamente el resultado de división por 0: int i = 12 / 0; Gestión de Errores
5. Excepciones Predefinidas Gestión de Errores IncompatibleClassChangeException El intento de cambiar una clase afectada por referencias en otros objetos, específicamente cuando esos objetos todavía no han sido recompilados. ClassCastException El intento de convertir un objeto a otra clase que no es válida. NullPointerException Se produce cuando se intenta acceder a una variable o método antes de ser definido.
6. Excepciones Predefinidas Gestión de Errores NegativeArraySizeException Puede ocurrir si hay un error aritmético al cambiar el tamaño de un array. NoClassDefFoundException Se referenció una clase que el sistema es incapaz de encontrar. ArrayIndexOutOfBoundsException Se genera al intentar acceder a un elemento de un array más allá de los límites definidos inicialmente para ese array.
7. Excepciones Predefinidas Gestión de Errores UnsatisfiedLinkException Se intenta de acceder a un método nativo que no existe. InternalException Este error se reserva para eventos que no deberían ocurrir. Por definición, el usuario nunca debería ver este error y esta excepción no debería lanzarse.
8. Excepciones Propias También el programador puede lanzar sus propias excepciones, extendiendo la clase System.exception . Por ejemplo, considérese un programa cliente/servidor. El código cliente se intenta conectar al servidor, y durante 5 segundos se espera a que conteste el servidor. Si el servidor no responde, el servidor lanzaría la excepción de time-out Gestión de Errores
9. Excepciones Propias Gestión de Errores class ServerTimeOutException extends Exception {} public void conectame( String nombreServidor ) throws Exception { int exito; int puerto = 80; exito = open( nombreServidor,puerto ); if( exito == -1 ) throw ServerTimeOutException; } Excepciones Predefinidas
10. public void encuentraServidor() { try { conectame( servidorDefecto ); catch( ServerTimeOutException e ) { g.drawString( "Time-out del Servidor, intentando alternativa",5,5 ); conectame( servidorAlterno ); } } Excepciones Propias Gestión de Errores Excepciones Propias
11. Captura de Excepciones Gestión de Errores Las excepciones lanzadas por un método que pueda hacerlo deben recoger en bloque try/catch o try/finally. try Es el bloque de código donde se previene que se genere una excepción. El bloque try tiene que ir seguido, al menos, por una cláusula catch o una cláusula finally. try { // Sentencias Java }
12. Captura de Excepciones Gestión de Errores catch Es el código que se ejecuta cuando se produce la excepción. No hay código alguno entre un bloque try y un bloque catch , ni entre bloques catch . La sintaxis general de la sentencia catch en Java es la siguiente: catch( UnTipoTrhowable nombreVariable ) { // sentencias Java }
13. Captura de Excepciones Gestión de Errores try Es el bloque de código que se ejecuta siempre, haya o no excepción. Este bloque finally puede ser útil cuando no hay ninguna excepción. Es un trozo de código que se ejecuta independientemente de lo que se haga en el bloque try .
14. Captura de Excepciones Gestión de Errores throw La sentencia throw se utiliza para lanzar explícitamente una excepción. En primer lugar se debe obtener un descriptor de un objeto Throwable , bien mediante un parámetro en una cláusula catch o, se puede crear utilizando el operador new. La forma general de la sentencia throw es: throw ObjetoThrowable;
15. Captura de Excepciones Gestión de Errores throws Si un método es capaz de provocar una excepción que no maneja él mismo, debería especificar este comportamiento, para que todos los métodos que lo llamen puedan colocar protecciones frente a esa excepción. La palabra clave throws se utiliza para identificar la lista posible de excepciones que un método puede lanzar.
16. Ejemplo Gestión de Errores public class ValidacionNumero { public static void main(String[] args) { boolean esNumero = false; int nro = 0; String txtNro = null; do{ txtNro = JOptionPane.showInputDialog("Ingrese un nro. "); try{ nro = Integer.parseInt(txtNro); esNumero = true; }catch(NumberFormatException nfe){ System.out.println("ERROR. No ha ingresado un nro."); } }while(esNumero == false); JOptionPane.showMessageDialog(null, "El nro ingresado fue el: " + nro, "Resultado", JOptionPane.INFORMATION_MESSAGE); System.exit(0); } } .