Especificar las Excepciones Lanzadas por un Método

Le sección anterior mostraba como escribir un manejador de excepción para el método writeList() de la clase ListOfNumbers. Algunas veces, es apropiado capturar las excepciones que ocurren pero en otras ocasiones, sin embargo, es mejor dejar que un método superior en la pila de llamadas maneje la excepción. Por ejemplo, si se está utilizando la clase ListOfNumbers como parte de un paquete de clases, probablemente no se querrá anticipar las necesidades de todos los usuarios de su paquete. En este caso, es mejor no capturar las excepciones y permitir que alguín la capture más arriba en la pila de llamadas.

Si el método writeList() no captura las excepciones que pueden ocurrir dentro de él, debe especificar que puede lanzar excepciones. Modifiquemos el método writeList() para especificar que puede lanzar excepciones. Como recordatorio, aquí tienes la versión original del método writeList():

public void writeList() {
    System.out.println("Entrando en la sentencia try");
    int i;
    pStr = new PrintStream(
              new BufferedOutputStream(
                 new FileOutputStream("OutFile.txt")));

    for (i = 0; i < size; i++)
        pStr.println("Value at: " + i + " = " + victor.elementAt(i));
}
Como recordarás, la setencia new FileOutputStream("OutFile.txt") podría lanzar un excepción IOException (que no es una excepción en tiempo de ejecución). La sentencia victor.elementAt(i) puede lanzar una excepción ArrayIndexOutOfBoundsException (que es una subclase de la clase RuntimeException, y es una excepción en tiempo de ejecución).

Para especificar que writeList() lanza estas dos excepciones, se añade la clausula throws a la firma del método de writeList(). La clausula throws está compuesta por la palabra clave throws seguida por una lista separada por comas de todas las excepciones lanzadas por el método. Esta clausula va después del nombre del método y antes de la llave abierta que define el ámbito del método. Aquí tienes un ejemplo:

public void writeList() throws IOException, ArrayIndexOutOfBoundsException {
Recuerda que la excepción ArrayIndexOutOfBoundsException es una excepción en tiempo de ejecución, por eso no tiene porque especificarse en la sentecia throws pero puede hacerse si se quiere.


Ozito