Presentación Programación Orientada a Objetos :: Prof. Yeniffer Peña
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.
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.
La existencia de las excepciones permite: Encapsular en clases los errores. Separar el flujo de ejecución normal del tratamiento de errores. Las excepciones se pueden: o tratar o re-lanzar para que sean tratadas por otro método del stack.
Necesidad de Tratar Errores Consideremos el pseudo-código del siguiente método que lee un archivo y copia su contenido en memoria. Qué pasa si no puede reservarse memoria suficiente? Qué pasa si el archivo no puede abrirse? leerarchivo{ abrir el archivo; determinar la longitud del archivo; reservar la memoria suficiente; copiar el archivo en memoria; cerrar el archivo; Qué pasa si el archivo no puede cerrarse? Qué pasa si falla la lectura?
Una Excepción: 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)
Llamadas a métodos Método donde ocurre el error. Método sin manejador de la exception Método con manejador de la exception main Búsqueda del manejador apropiado
Gestión de Errores en Java Manejo de Excepciones: Se manejan mediante bloques try & catch 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
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. 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.
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.
finally: 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, )
Gestión de Errores en Java Tratamiento de las Excepciones: 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();
Tratamiento de las Excepciones: 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 v[i] falla y lanza una excepción ArrayIndexOutOfBoundsException Todo va bien y el bloque try termina normalmente.
Lanzamiento de Excepciones: Un método indica que puede lanzar o (relanzar) una excepción mediante la palabra throws. Un método crea y lanza una excepción mediante la palabra throw. public class FileInputStream extends InputStream { public FileInputStream (File afile) throws IOException { if (..) { throw new IOException ( No existe el archivo );
Lanzamiento de Excepciones: public void pop() throws EmptyStackException { { if (size == 0) { throw new EmptyStackException(); setobjectat(size-1, null); size- -;
La clase Throwable y sus SubClases: Error Object Throwable Exception RuntimeException IOException InterruptedException La clase java.lang.throwable describe cualquier clase que puede ser lanzada como excepción.
Jerarquía de Clases: Existen dos tipos de clases Throwable: 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: 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: ArithmeticException NullPointerException NumberFormatException IndexOutOfBoundsException
Jerarquía de Clases: java.io.ioexception comprende los errores de entrada/salida. FileNotFoundException EOFException java.lang.interruptedexception de cuyo tipo son los errores debidos a la interrupción de un hilo de ejecución por otro.
La Clase Throwable: 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.
La Clase Throwable: String getmessage () Devuelve el texto con el mensaje de error del objeto. void printstacktrace() Imprime este objeto y su traza en la salida de errores estándar. void printstacktrace (PrintStream s) Imprime este objeto y su traza en el canal especificado. void printstacktrace(printwriter s) Imprime este objeto y su traza en el print writer especificado.
Error VirtualMachineError AWTError Exception RuntimeException IOException StackOverflowError OutOfMemoryError ArithmeticException NullPointerException NumberFormatException IndexOutOfBoundsException FileNotFoundException EOFException
Excepciones Comunes: ArithmeticException 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. NullPointerException Se produce cuando se intenta acceder a un objeto que no ha sido definido y posee valor null. NoClassDefFoundException Se referenció una clase que el sistema es incapaz de encontrar.
Excepciones Comunes: IndexOutOfBounds Lanzada cuando se intenta acceder a una posición inexistente en un arreglo. NoSuchFieldError Se intenta acceder a un atributo inexistente. NoSuchMethodError Se intenta acceder a un método inexistente.
Excepciones Comunes: ClassCastException El intento de convertir un objeto a una clase de la cual no es instancia. y = (Prueba) x; // donde x no es de tipo Prueba NegativeArraySizeException Puede ocurrir si hay un error aritmético al intentar cambiar el tamaño de un array. IllegalArgumentException Ocurre cuando se llama a un método con un parámetro erróneo.
Excepciones Comunes: NumberFormatException Se intenta convertir una cadena de caracteres a un número y ésta tiene caracteres no numéricos. 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.
Excepciones Comunes: OutOfMemoryException 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.
Finalización Programación Orientada a Objetos :: Prof. Yeniffer Peña