Excepciones en Java

Publicado: Sábado, 13 \13\UTC junio \13\UTC 2009 en 10. Programación orientada a objetos (y II)

Nos guste o nos deje de gustar, la realidad es que los programas no son perfectos y siempre acaban por funcionar de manera inadecuada, ya sea por errores de programación, errores en la entrada de datos de los usuarios, hardware que deja de responder, o cualquier otra cosa que pueda pasar. De esto es lo que vamos a hablar en esta entrada; en concreto, de cómo desarrollar nuestros programas para que gestionen correctamente los errores que puedan producirse.

Un poco de historia (o cómo funcionábamos en la era pre-POO)

La gestión de errores en lenguajes de programación tradicionales se ha hecho habitualmente mediante el uso de sentencias condicionales que trataban los distintos errores que el programador podía presuponer. Algo parecido a esto:

int status = miFuncionQueAcabaraConLaPobrezaEnElMundo();

if (status == 0) {

// La función se ejecuta correctamente, tenemos un mundo mejor. Creemos código ahora para abordar la paz mundial.

}

} else {

switch (status) {

case 1: System.out.println(“Error de tipo 1. Los gobiernos no ayudan.”);

case 2: System.out.println(“Error de tipo 2. La población no se implica.”);

case 3: System.out.println(“Error de tipo 3. Es una utopía”);

default: System.out.println(“Cualquier otro error que no había previsto”);

}

}

En este código se llama al método para “acabar con la pobreza en el mundo” que estará en algún otro lugar de la clase. Este método devuelve un entero que indica que se ha ejecutado correctamente (devuelve un 0) o bien ha ocurrido un error (devuelve cualquier otro valor diferente de 0). Según que error ocurra, el código mostrará un mensaje u otro.

Fijaos que la cantidad de código que controla los errores oscurece el código “normal”. A medida que el código aumente, también se hará más complicado el control de errores. Además, se dificultará la lectura del programa y su mantenimiento.

Con el lenguaje Java esta idea del control de errores deja de existir, ya que la gestión de errores se realiza automáticamente. Para hacer esta gestión automática, Java incluye un conjunto de clases creadas específicamente para el control de errores, que se llaman excepciones.

¿Cómo funcionan las excepciones?

Cuando un programa finaliza su ejecución de manera anormal, se lanza una excepción. Las excepciones pueden haberse lanzado por las clases que se utilizan o bien manualmente por tu propio código.

Además de “lanzadas” (del término thrown en inglés), las excepciones también se pueden “capturar” (del término catch en inglés). Capturar una excepción significa que tú mismo controlarás esa excepción para que el programa no finalice de manera inesperada.

Las excepciones son clases heredadas de la clase Throwable y pueden pertenecer a distintos paquetes. En todos los tipos se pueden usar los métodos siguientes:

  1. String getMessage(). Mensaje de la excepción
  2. String toString(). Mensaje que describe la excepción
  3. void printStackTrace(). Método desde el cual se lanzó la excepción

Capturar una excepción

Como ya hemos comentado, cuando en un método se produce una situación inesperada, se lanza una excepción. Para capturarla, se utilizan el conjunto de sentencias try, catch y finally.

Todo el código que pongamos dentro de un bloque try será inspeccionado automáticamente para controlar situaciones anómalas que, en caso de ocurrir, pasarían el control al bloque catch, encargado de gestionar el error producido. Para cada error que queramos controlar, deberemos incluir un nuevo bloque catch. Podemos incluir tantos bloques catch como consideremos oportunos. Sin embargo, el bloque finally es opcional y se ejecuta siempre, tanto si se produce excepción como si el código dentro del bloque try se ejecuta correctamente.

ATENCIÓNEl bloque finally se ejecutará incluso si existe una sentencia return en el bloque try.

Veamos la sintaxis para el control de errores mediante el uso de sentencias try-catch-finally.

try {

// Aquí va nuestro código de programa

} catch (excepcionACapturar e) {

// Aquí va el código que se ejecuta si se produce una excepción del tipo excepcionACapturar

} catch (Exception e) {

// Aquí va el código que se ejecuta si se produce cualquier otra excepción

} finally {

// Opcional. Aquí va el código que va a ejecutarse siempre, tanto si se produce excepción como si no se produce.

}

Crear una excepción definida por el usuario

Además de las excepciones que definen los métodos de las clases, también podemos definir nuestras propias excepciones.

Para crear este tipo de excepciones, heredamos de la clase Exception. Veamos un ejemplo:

public class miExcepcion extends Exception {

// Aquí se definen los atributos de la clase

public miExcepcion () {

// Método constructor

}

// Aquí se definen otros métodos, como por ejemplo, getters y setters

}

Para lanzar esta excepción, utilizamos la sentencia throw. Ejemplo:

throw new miExcepcion();

Esta instrucción lanza la excepción miExcepcion() que habíamos definido anteriormente.


Creative Commons License
Excepciones en Java by Cristian Jorge Garcia Marcos is licensed under a Creative Commons Reconocimiento-Compartir bajo la misma licencia 3.0 España License.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s