jueves, 31 de octubre de 2013

ESTRUCTURAS DE PROGRAMACIÓN - IV

Bloque try {...} catch (...) finally {...} 
Java incorpora en el propio lenguaje la gestión de errores. El mejor momento para detectar los errores es durante la compilación. Sin embargo prácticamente sólo los errores de sintaxis son detectados en esta operación. El resto de problemas surgen durante la ejecución de los programas. En el lenguaje Java, una Exceplion es un cierto tipo de error o una condición anormal que se lia producido durante la ejecución de un programa. Algunas excepciones son fatales y provocan que se deba finalizar la ejecución del programa. En este caso conviene terminar ordenadamente y dar un mensaje explicando el tipo de error que se lia producido. Otras excepciones, como por ejemplo 110 encontrar un fichero en el que hay que leer o escribir algo, pueden ser recuperables. En este caso el programa debe dar al usuario la oportunidad de corregir el error (definiendo por ejemplo un nuevo path del fichero 110 encontrado).
Los errores se representan mediante clases derivadas de la clase Throwable, pero los que tiene que chequear un programador derivan de Exception (java.lang.Exception que a su vez deriva de Throwable). Existen algunos tipos de excepciones que Java obliga a tener en cuenta. Esto se hace mediante el uso de bloques try. catch y finally. 
El código dentro del bloque tiy está "vigilado". Si se produce una situación anormal y se lanza como consecuencia una excepción, el control pasa al bloque catch. que se hace cargo de la situación y decide lo que hay que hacer. Se pueden incluir tantos bloques catch como se desee, cada uno de los cuales tratará un tipo de excepción. Finalmente, si está presente, se ejecuta el bloque finally. que es opcional, pero que en caso de existir se ejecuta siempre, sea cual sea el tipo de error.
En el caso en que el código de un método pueda generar una Exception y no se desee incluir en dicho método la gestión del error (es decir los bucles try/catch correspondientes), es necesario que el método pase la Exception al método desde el que ha sido llamado. Esto se consigue mediante la adición de la palabra throws seguida del nombre de la Exception concreta, después de la lista de argumentos del método. A su vez el método superior deberá incluir los bloques try/catch o volver a pasar la Exception. De esta forma se puede ir pasando la Exception de un método a otro hasta llegar al último método del programa, el método inainQ.
En el siguiente ejemplo se presentan dos métodos que deben "controlar" una IOException relacionada con la lectura ficheros y una MyException propia. El primero de ellos (metodol) realiza la gestión de las excepciones y el segundo (metodo2) las pasa al siguiente método.

void metodol() {
try {
... // Código que puede lanzar las excepciones IOException y MyException
} catch (IOException el) {// Se ocupa de IOException simplemente dando aviso
System.out.println(el.getMessage());
} catch (MyException e2) {
// Se ocupa de MyException dando un aviso y finalizando la función
System.out.println(e2.getMessage()); return;
} finally { // Sentencias que se ejecutarán en cualquier caso
}]
} // Fin del metodol
void metodo2() throws IOException, MyException {
// Código que puede lanzar las excepciones IOException y MyException
} // Fin del metodo2

El tratamiento de excepciones se desarrollará con más profundidad en el Capítulo 8, a partir de la página 145.

No hay comentarios:

Publicar un comentario