En PC Resumen hablaremos de que son las Excepciones de Java y como controlarlas. Una excepción a Java es un objeto que describe una condición excepcional, es decir, un error que se ha dado en una parte del código. Cuando aparece una condición excepcional, se crea un objeto que representa esta excepción y se lanza el método que ha causado el error. Este método puede escoger entre gestionar él mismo la excepción o pasarla. De cualquiera de las maneras, en un punto determinado, se cazará la excepción y se procesará. Las excepciones pueden generarse por el intérprete de Java o de forma manual por el propio código. Normalmente las excepciones generadas por Java están relacionadas con errores fundamentales que violan las reglas del lenguaje o las restricciones del entorno de ejecución.
La forma general de un bloque de gestión de excepciones es la siguiente:
try {
// bloque de código que controla los errores
}
catch (ExcepcionTipo1 exOb) {
// gestor de excepciones para Excepción Tipo 1
}
....
catch (ExcepcionTipoN exOb) {
// gestor de excepciones para Excepción Tipo N
}
finally {
// código que se ejecutará siempre
}
Excepciones no capturadas
Antes de ver cómo gestionar las excepciones, será útil ver que pasa cuando no se gestionan. El siguiente código provoca intencionadamente un error debido a una división por cero.
class Exc0 {
public static void main(String args[]) {
int d = 0;
int a = 42 / d;
}
}
Cuando el intérprete Java detecta un intento de división por cero, construye un nuevo objeto de excepción y luego la lanza. Esto provoca que la ejecución de este programa se detenga, porque una vez la excepción se ha lanzado, debe capturarse por un gestor de excepciones y tratarse de forma inmediata. Como en este ejemplo, no se han proporcionado gestores de excepciones, la excepción se captura por el gestor por defecto que proporciona Java. Cualquier excepción no capturada por el programa, finalmente la procesará el gestor por defecto, que presentará un mensaje describiendo la excepción, imprimiendo el trazado de la pila del programa y finalizando este.
La excepción generada por el programa siguiente sería:
java.langArithmeticException : /by zero at Exc0.main(Exc0.java:4)
Obsérvese que en el trazado de la pila, se incluye el nombre de la clase, el nombre del método, el nombre del archivo y el número de línea. Fijémonos también que el tipo de excepción lanzada, llamada ArithmeticException, describe de forma más especifica el tipo de error que se ha producido. Como veremos más adelante, Java proporciona bastante tipo de excepciones que se ajustan a las diferentes clases de errores que se pueden generar.
El trazado de la pila siempre mostrará la secuencia de llamadas a métodos que preceden al error. Por ejemplo, vemos otra versión del programa anteriores que introduce el mismo error pero en un método diferente:
class Exc1 {
static void subrutina() {
int d = 0;
int a = 10 / d;
}
public static void main(String args[]) {
Exc1.subrutina();
}
}
En este caso el trazado de la pila muestra la pila de llamadas completa:
java.lang.ArithmeticException: /by zero
at Exc1.subrutina (Exc1.java:7)
at Exc1.main (Exc1.java:4)
La pila de llamadas es muy útil para la depuración ya que muestra la secuencia exacta de pasos que condujo al error.