martes, 2 de febrero de 2021

Excepciones.

Hemos dicho que hay tres tipos de errores en programación: errores que se detectan al compilar, por lo que se corrigen inmediatamente; errores de ejecución, que producen una ruptura en la ejecución del programa; y errores lógicos, que son indetectables, y producen resultados falsos e imprevisibles. Los que pueden tener un tratamiento de entre los errores de ejecución son los llamados excepciones, en cambio, los llamados propiamente errores, no tienen tratamiento. Los errores y excepciones -errores de ejecución- generan al producirse objetos de la clase específica de ese error. Nosotros estudiaremos los de las subclases de Exception, pues son recuperables.
Nos centraremos, de entre la clase exception, en las IOException y RuntimeException. LANZAR UNA EXCEPCIÓN. Cuando se produce un error de ejecución, el ordenador lanza una excepción, un objeto de una clase, y se interrumpe su ejecución. El programador puede también provocar el lanzamiento de una excepción, con la instrucción throw e; siendo e un objeto de la clase de excepción que interese. Ej: Scanner t= new Scanner(System.in); System.out.println("Introduzca la hora, -entre 0 y 23-"); int h = t.nextInt(); if (h < 0 || h>23){ throw new InputMismatchException( "Valor incorrecto "); } El ordenador lanza una excepción, bien de modo propio, bien provocada por el programador. El siguiente paso es CAPTURA DE LA EXCEPCIÓN: Si no se gestiona la excepción lanzada se produce una terminación abrupta del programa. Java dispone de una instrucción que permite gestionar las excepciones lanzadas: try-catch o try-catch-finally. Con esta instrucción se CAPTURA la excepción del tipo, y se continúa la ejecución del programa como se desee. Ejemplo: try { código donde se pueden producir excepciones } catch(TipoExcepcion1 e1){ lo que se hace con ello } catch(TipoExcepcion2 e2){ lo que se hace con ello } .. finally { bloque opcional. Se ejecuta siempre, tanto si se han producido excepciones como si no. } Hemos visto hasta ahora que errores de ejecución lanzan excepciones, que también el programador puede producir el lanzamiento de excepciones como la instrucción throw e, el tipo de excepción. Hemos visto así mismo como se capturan con la instrucción try-catch: try como el bloque matriz donde se genera la excepción y catch que captura propiamente la excepción de un tipo concreto. .. puede haber tantos catchs como tipos distintos de excepciones se puedan generar. Vamos a ver la PROPAGACIÓN de excepciones: tratar la excepción en un lugar distinto de donde se ha producido. Java permite añadir cláusulas en las cabeceras de los métodos para que se propaguen las excepciones que se generen en su interior. Esta cláusula es throws TipoException, pudiendo haber más de una excepción, separadas con comas. Ejemplo: public static void escribeComp(int i, int[] a) throws ArrayIndexOutOfBoundsException { System.out.println(a[i]); } public static void main(String args[]){ int [] v = new int[100]; Scanner t = new Scanner(System.in); boolean lecturaCorrecta = false; int n = 0; do { try { System.out.print("Índice (entre 0 y 99)? "); n = t.nextInt(); escribeComp(n,v);//puede dar la excepción de fuera de rango lecturaCorrecta = true; } catch (ArrayIndexOutOfBoundsException e) { System.out.println("error, "+ n +" incorrecto, pruebe otra vez. "); } while(!lecturaCorrecta); } si llega aquí es que ha hecho una lectura correcta! el while lo que hace es que se repita la entrada si la lectura no ha sido correcta, pues el valor de la guarda es true: niega una negación. y mientras la guarda sea true repite el bucle. ds del método y antes del bloque de instruccione, pone el try-catch en el do!

No hay comentarios:

Publicar un comentario