Excepciones java
Las excepciones (Exceptions) son un mecanismo del lenguaje Java que facilita que el desarrollador maneje condiciones excepcionales, que normalmente están asociadas a fallos, dentro de sus programas. Existen un conjunto de excepciones predefinidas dentro de la API estándar de Java, pero el desarrollador puede definir sus propias excepciones si lo desea. Paracomprender qué es y cómo se maneja una excepción, lee detenidamente los siguientes puntos.
Las excepciones de Java son clases (soportan herencia, polimorfismo, etc.) que heredan de otra excepción
Existe una jerarquía predefinida de clases de excepción cuya raíz es la clase Throwable
Una instancia (objeto) de una de estas clases puede ser "lanzada" dentro de un programa a través de lasentencia throw
Una vez que una excepción se ha lanzado, el flujo natural de ejecución del programa se detiene en el instante en que produce la llamada a throw, de modo, que la excepción se propaga por la pila del programa, desde los llamados hacia los llamantes, interrumpiendo la ejecución de todos ellos.
La única manera de detener la propagación de una excepción que ha sido lanzada es a través de unmanejador de excepciones
Si una excepción no se maneja en ninguna parte de la cadena de propagación, terminará deteniendo el programa (o el thread) en el que se ha lanzado
El manejador de excepciones en Java tiene la sintaxis siguiente:
try{
//Aquí está el código que puede lanzar excepciones
...
} catch (ClaseDeLaExcepcion objetoException) {
...
//Aquí está el código quese ejecutará si se lanza una excepción del
//tipo ClaseDeLaExcepción
...
}
Para comprender con precisión el manejo de excepciones, observa el ejemplo siguiente:
Fichero: EjemploExcepciones.java
public class EjemploExcepciones {
public static void main(String[] args) {
if (args.length != 1)
System.out.println("Debe introducir un entero a la entrada");
intenteroLeido = stringToInt(args[0]);
System.out.println("Ha introducido el entero " + enteroLeido);
}
private static int stringToInt(String entero) {
int resultado = Integer.parseInt(entero);
return resultado;
}
}
Prueba a compilar y ejecutar el programa, verás que transforma la cadena de caracteres que le indiquemos como argumento en un entero:
# javacEjemploExcepciones.java
# java EjemploExcepciones 1234
Ha introducido el entero 1234
Prueba ahora a introducir una cadena de caracteres que no corresponda con el formato de ningún entero:
# java EjemploExcepciones elGato
Exception in thread "main" java.lang.NumberFormatException: For input string: "elGato"
at java.lang.NumberFormatException.forInputString
(NumberFormatException.java:48)
atjava.lang.Integer.parseInt(Integer.java:447)
at java.lang.Integer.parseInt(Integer.java:497)
at EjemploExcepciones.stringToInt(EjemploExcepciones.java:13)
at EjemploExcepciones.main(EjemploExcepciones.java:8)
Como puedes observar, la máquina virtual ha detectado que "elGato" no tiene el formato de ningún entero y, por ese motivo, ha elevado una excepción en el método estático parseInt de la claseInteger, que está en el paquete java.lang de la API estándar. Esa excepción se ha propagado a nuestro método estático stringToInt y desde ahí al método main. Como ninguno de esos métodos implementaba un manejador de excepciones, el programa ha terminado por detenerse.
Imaginemos ahora que modificamos el programa del modo siguiente:
public class EjemploExcepciones {
public static voidmain(String[] args) {
if (args.length != 1)
System.out.println("Debe introducir un entero a la entrada");
try{
int enteroLeido = stringToInt(args[0]);
System.out.println("Ha introducido el entero " + enteroLeido);
} catch (NumberFormatException e) {
System.out.println("La cadena " + args[0] + " no es un entero. Ten más cuidado la próxima vez");
}...
Regístrate para leer el documento completo.