La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.

Presentaciones similares


Presentación del tema: ":: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación."— Transcripción de la presentación:

1 :: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación

2 Gestión de Errores en Java  Utiliza las excepciones java.  Una excepción es una condición anormal que se produce en una porción de código durante su ejecución. Es decir, es un evento que interrumpe el flujo normal de instrucciones durante la ejecución de un programa. Programación I

3 Gestión de Errores en Java  Las aplicaciones pueden producir muchas clases de errores de diversos niveles de seguridad: Un archivo que no puede encontrarse o que no existe. Un índice fuera de rango. Un enlace fuera de red que falla. Un fallo en un disco duro. Programación I

4 La existencia de las excepciones permite:  Encapsular en clases los errores.  Separar el flujo de ejecución normal del tratamiento de errores. Gestión de Errores en Java Programación I

5  Mayor robustez y fiabilidad en el programa.  Programación defensiva, que prevé el uso inadecuado del programa por parte del usuario.  Un programa no debe parar ante un error de hardware o software, más bien debe detectarlo y si es posible, recuperarse del mismo. Gestión de Errores en Java Programación I ¿Por qué se deben tratar las excepciones?

6 Gestión de Errores en Java  Consideremos el pseudo-código del siguiente método que lee un archivo y copia su contenido en memoria. leerArchivo{ abrir el archivo; determinar la longitud del archivo; reservar la memoria suficiente; copiar el archivo en memoria; cerrar el archivo; } Programación I ¿Qué pasa si el archivo no puede abrirse? ¿Qué pasa si no puede reservarse memoria suficiente? ¿Qué pasa si falla la lectura? ¿Qué pasa si el archivo no puede cerrarse? Necesidad de Tratar Errores El tratamiento de errores en Java se hace por medio de las excepciones y éstas se pueden: ó tratar ó re-lanzar para que sean tratadas por otro método del stack.

7 Gestión de Errores en Java  Las Excepciones son clases en Java. (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Exception.html)http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Exception.html  Son clases muy sencillas.  Tienen dos constructores (entre otros) Exception() Exception (String mensaje)  Obtención del mensaje Exception.getMessage();  Mostrar la traza del error Exception.printStackTrace(); Programación I La clase Exception

8 Programación I Gestión de Errores en Java ArithmeticException NullPointerException NoClassDefFoundException IndexOutOfBounds NoSuchFieldError NoSuchMethodError ClassCastException Las clases Exception más comunes: Las excepciones aritméticas son típicamente el resultado de una división por 0 ó una situación anómala en una operación aritmética. Se produce cuando se intenta acceder a un objeto que no ha sido definido y posee valor null. Se referenció una clase que el sistema es incapaz de encontrar. Lanzada cuando se intenta acceder a una posición inexistente en un arreglo. Se intenta acceder a un atributo inexistente. Se intenta acceder a un método inexistente. El intento de convertir un objeto a una clase de la cual no es instancia. Por ejemplo: y = (Prueba) x; //x no es de tipo Prueba El intento de convertir un objeto a una clase de la cual no es instancia. Por ejemplo: y = (Prueba) x; //x no es de tipo Prueba

9 Programación I Gestión de Errores en Java NegativeArraySizeException IllegalArgumentException NumberFormatException InternalException OutOfMemoryException Las clases Exception más comunes: Puede ocurrir si hay un error aritmético al intentar cambiar el tamaño de un array. Ocurre cuando se llama a un método con un parámetro erróneo. Se intenta convertir una cadena de caracteres a un número y ésta tiene caracteres no numéricos. Este error se reserva para eventos que no deberían ocurrir. Por definición, el usuario nunca debería ver este error y ésta excepción no debería lanzarse. ¡No debería producirse nunca! El intento de crear un objeto con el operador new ha fallado por falta de memoria. Y siempre tendría que haber memoria suficiente porque el garbage collector (recolector de basura) se encarga de proporcionarla al ir liberando objetos que no se usan y devolviendo memoria al sistema.

10 Gestión de Errores en Java  Cuando ocurre un error en un método, éste crea un objeto exception y lo entrega al sistema de ejecución (lanza una excepción).  Este objeto contiene información sobre el error, incluido su tipo y el estado del programa donde ocurrió.  El sistema de ejecución recorre la pila de llamadas buscando un método que contenga un bloque de código que maneje la exception (manejador de excepción) Programación I Una Excepción:

11 Gestión de Errores en Java Método donde ocurre el error. Método sin manejador de la exception Método con manejador de la exception main Llamadas a métodos Búsqueda del manejador apropiado Programación I Método donde ocurre el error.

12 Gestión de Errores en Java  Se manejan mediante bloques try & catch Sintáxis: try { //código susceptible de lanzar una exception } catch (tipo_exception e) { //código de tratamiento de la exception } catch (tipo_exception e) { //código de tratamiento de la exception } finally { //código que se ejecuta siempre } Programación I Manejo de Excepciones:

13 try:  Es el bloque de código donde se prevé 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. Programación I Gestión de Errores en Java catch:  Es el código que se ejecuta cuando se produce la excepción. Es como si dijésemos "controlo cualquier excepción que coincida con mi argumento".  En este bloque tendremos que asegurarnos de colocar código que no genere excepciones.

14 catch:  Se pueden colocar sentencias catch sucesivas, cada una controlando una excepción diferente. No debería intentarse capturar todas las excepciones con una sola cláusula, como esta: catch( Excepcion e ) {...  Esto representaría un uso demasiado general, podrían llegar muchas más excepciones de las esperadas. En este caso es mejor dejar que la excepción se propague hacia arriba y dar un mensaje de error al usuario. Programación I Gestión de Errores en Java

15 finally: Programación I Gestión de Errores en Java  El bloque finally sirve para colocar en él instrucciones que se desea que se realicen siempre que se sale de un bloque try.  Es opcional, pero pasa a ser obligatorio cuando el bloque try no va seguido por ninguna cláusula catch.  Su función es la de dejar el programa en un estado correcto independientemente de lo que suceda dentro del bloque try (cerrar archivos, liberar recursos,…)

16 Gestión de Errores en Java Programación I Tratamiento de las Excepciones: Si y==0 la operación no se puede realizar y detendría la ejecución del programa Cómo la excepción se está tratando, si y==0 el programa salta al bloque catch e imprime el mensaje de error y continúa con la ejecución del programa Si entra al bloque catch retorna 0, sino retorna el resultado de dividir x por y

17 Gestión de Errores en Java Programación I Tratamiento de las Excepciones:  Si se genera una Exception dentro del bloque try se pasa el control a su manejador: Se busca en los bloques catch aquél que corresponda a la Exception. Si se encuentra el bloque catch correspondiente se ejecuta el código asociado y después se salta al final del bloque try.  Si no surge ninguna Exception en el bloque de código no se ejecutan las sentencias de los bloques catch

18 Gestión de Errores en Java Programación I Tratamiento de las Excepciones: Código propenso a generar una excepción. Código que no genera excepciones y se ejecuta sin ningún inconveniente Código que no genera excepciones. Si se produce la excepción, este código no se ejecuta Se esta intentado atrapar una excepción aritmética El código dentro del bloque catch se ejecuta si se produce la excepción aritmética Cuando la excepción aritmética se produce (y==0) el programa salta de forma automática al bloque catch correspondiente Si se produce o no la excepción se continua con el código que se encuentra al final de try-cath

19 Gestión de Errores en Java Programación I Tratamiento de las Excepciones: Código propenso a lanzar las excepciones ClaseException1, Clase Exception2 o ClaseException3 Se compara si la excepción generada es del tipo ClaseException1. Como no lo es, se continúa la búsqueda Se compara si la excepción generada es del tipo ClaseException2. Como no lo es, se continúa la búsqueda Se compara si la excepción generada es del tipo ClaseException3. Como lo es, se ejecuta el código en este bloque Al finalizar de tratar la Excepción se continúa con el código que sigue después del try-catch En caso que el código lance la excepción ClaseException3, la JVM busca el bloque catch correspondiente de la siguiente forma

20 Gestión de Errores en Java Programación I Tratamiento de las Excepciones: En caso que el código lance la excepción ClaseException1, la JVM busca el bloque catch correspondiente de la siguiente forma Se compara si la excepción generada es del tipo ClaseException1. Como lo es, se ejecuta el código en este bloque Al finalizar el bloque catch que trata ClaseException1 se continúa con el código que sigue después del try- catch

21 Gestión de Errores en Java Programación I Tratamiento de las Excepciones:  Como ya se dijo anteriormente, la cláusula finally se utiliza para sentencias que se deben realizar siempre (ocurra o no la excepción). Si no se ha producido una Exception: finally se ejecuta después del bloque try. Si se ha producido una Exception: finally se ejecuta después del catch correspondiente o, si no lo hay, después de que se haya producido la Exception.  Se ejecuta siempre, no importa que existan sentencias return ó break en el try o los catch.  Por cada bloque try sólo puede haber una cláusula finally.

22 Gestión de Errores en Java Programación I Tratamiento de las Excepciones: Las flechas a continuación indican el flujo del programa en caso de que no se produzca ninguna excepción Ejecuta el código del bloque finally

23 Gestión de Errores en Java Programación I Tratamiento de las Excepciones: Las flechas a continuación indican el flujo del programa en caso que se produzca la excepción ClaseException1 Ejecuta el código del catch ClaseException1 Ejecuta el código del bloque finally

24 Gestión de Errores en Java Programación I Tratamiento de las Excepciones: Las flechas a continuación indican el flujo del programa en caso que se produzca alguna excepción que no es ClaseException1 ni claseException2 Ejecuta el código del bloque finally No entra

25 Gestión de Errores en Java public void escribirLista(){ PrintWriter out = null; try { out = new PrintWriter(new FileWriter(“out.txt”)); for (int i=0; i<SIZE; i++) { out.println(“valor: ” + i + “ = ” + v[i]); } catch (ArrayIndexOutOfBoundsException e) { System.err.println(“Indice fuera de rango”); } catch (IOException e) { System.err.println(“out.txt no puede ser abierto”); } finally { if (out != null) { out.close(); } } Programación I Tratamiento de las Excepciones: Otro ejemplo: El bloque try puede terminar de cualquiera de las siguientes tres formas: La instrucción new FileWriter(“out.txt”) falla y lanza una excepción IOException. La instrucción new FileWriter(“out.txt”) falla y lanza una excepción IOException. La instrucción v[i] falla y lanza una excepción ArrayIndexOutOfBoundsException Todo va bien y el bloque try termina normalmente.

26  Cuando se está en presencia de una excepción el programador debe elegir entre tratarla (try-catch) o lanzarla (throws).  Si la excepción se lanza fuera del método se debe indicar esta situación en la declaración del método, mediante la palabra throws. Programación I Gestión de Errores en Java public void miMetodo(…) throws ClaseException1, ClaseException2,… {. } Lanzamiento de Excepciones: Si el método propaga varias excepciones se deben separar con coma (,) Código que lanza las excepciones propagadas, sean propias o predefinidas

27 Programación I Gestión de Errores en Java Lanzamiento de Excepciones: main método 1 método2 método3 El main llama al método1 El método1 llama al método2 El método2 llama al método3 Se lanza la excepción “X” en el método3 El método3 propaga la excepción “X” y finaliza de forma anormal El método2 propaga la excepción “X” y su ejecución termina de forma abrupta El main propaga la excepción X, lo que implica que no se trató la excepción en ningún lugar y por tanto la ejecución del programa termina abruptamente El método1 propaga la excepción “X” y su ejecución termina de forma abrupta

28  Un método crea y lanza una excepción mediante la palabra throw. Programación I Gestión de Errores en Java public class FileInputStream extends InputStream { public FileInputStream (File aFile) throws IOException { if (…..) { throw new IOException (“No existe el archivo”); } Lanzamiento de Excepciones:

29 Programación I Gestión de Errores en Java public void pop() throws EmptyStackException { { if (size == 0) { throw new EmptyStackException(); } setObjectAt(size-1, null); size- -; } Lanzamiento de Excepciones:

30 Programación I Gestión de Errores en Java La clase Throwable y sus SubClases:  La clase java.lang.Throwable describe cualquier clase que puede ser lanzada como excepción.

31  Existen dos tipos de clases Throwable: Programación I Gestión de Errores en Java java.lang.Error representa errores de compilación y errores del sistema. Abarca fallos graves de los que los programas no pueden recuperarse y, por tanto, no suelen ser capturadas por los mismos. java.lang.Exception representa las excepciones generadas por la aplicación, por ende, las excepciones que los programas suelen capturar. Jerarquía de Clases:

32 Programación I Gestión de Errores en Java java.lang.RuntimeException representa excepciones generadas por la aplicación cuya gestión no es obligatoria. Comprende errores en tiempo de ejecución que se producen al efectuar operaciones sobre datos que se encuentran en la memoria de la computadora. Se subdivide en diversas subclases entre las que destacan: Jerarquía de Clases: ArithmeticException NullPointerException NumberFormatException IndexOutOfBoundsException

33 Programación I Gestión de Errores en Java java.io.IOException comprende los errores de entrada/salida. Jerarquía de Clases: FileNotFoundException EOFException java.lang.InterruptedException de cuyo tipo son los errores debidos a la interrupción de un hilo de ejecución por otro.

34  Sólo objetos que son instancias de la clase Throwable (o de una de sus subclases) pueden ser lanzados por la máquina virtual de java o con una instrucción throw.  Por convenio, la clase Throwable y sus subclases tienen dos constructores: uno sin argumentos y otro con un argumento de tipo String, el cual puede ser usado para producir mensajes de error.  Un objeto de la clase Throwable contiene el estado de la pila de ejecución (de su thread) en el momento en que fue creado. Programación I Gestión de Errores en Java La Clase Throwable:

35  String getMessage ()  void printStackTrace() Programación I Gestión de Errores en Java Devuelve el texto con el mensaje de error del objeto. Imprime este objeto y su traza en la salida de errores estándar.  void printStackTrace (PrintStream s)  void printStackTrace(PrintWriter s) Imprime este objeto y su traza en el canal especificado. Imprime este objeto y su traza en el print writer especificado. La Clase Throwable:

36 Programación I Gestión de Errores en Java  Error  Exception  VirtualMachineError  AWTError  ArithmeticException  NullPointerException  NumberFormatException  IndexOutOfBoundsException  StackOverflowError  OutOfMemoryError  RuntimeException  IOException  FileNotFoundException  EOFException

37 Gestión de Errores en Java Programación I Excepciones definidas por el programador:  En algunas circunstancias el programador querrá definir sus propias excepciones para tratar errores propios de las clases que ha creado.  El programador debe controlar de forma manual cuándo deben activarse dichas excepciones.  El tratamiento de las excepciones creadas por el usuario, se realiza de la misma manera que para las excepciones predefinidas por el lenguaje (try-catch).

38 Gestión de Errores en Java Programación I Para crear una nueva Excepción se debe crear una nueva clase Esta nueva clase debe heredar de la clase Exception En este caso hemos creado una nueva excepción llamada DivisionPar Sólo es necesario que esta nueva clase tenga dos constructores, uno por defecto y el otro paramétrico El constructor paramétrico debe recibir un String. Ambos constructores deben llamar al constructor del padre Excepciones definidas por el programador: Creación de un nuevo tipo de excepción:

39 Gestión de Errores en Java Programación I El método donde se presentará la excepción Este método debe propagar la excepción, debido a que no es lógico tratarla donde mismo se ha generado. Para detectar cuando lanzar la excepción se debe hacer un condicional, en este caso vamos a restringir la división por números pares Si se cumple la condición se lanza la excepción por medio de la palabra reservada throw Se crea un objeto de la clase de la Excepción que queremos lanzar, con el mensaje de error de la excepción. Si la condición no se cumple la excepción no es lanzada y se pasa a calcular la expresión. Excepciones definidas por el programador: Detección, propagación y lanzamiento de la excepción: La división par está

40 Gestión de Errores en Java Programación I Excepciones definidas por el programador: Tratando la Exception DivisionPar: Ésta instrucción esta propensa a generar una excepción DivisionPar Si se atrapa la excepción DivisionPar se imprime el mensaje de error y se cambia la bandera a true para que vuelva a solicitar los datos e intentar la división

41 :: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Finalización


Descargar ppt ":: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación."

Presentaciones similares


Anuncios Google