Escribir código, no solo en Java, sino en cualquier lenguaje de programación, no está exento de que se produzcan errores que impliquen que posiblemente la aplicación no se ejecute de manera correcta.
Java tiene toda una clase que sirve para manejar este tipo de situaciones, se trata Throwable, que a su vez tiene las subclases exception y error.
Las excepciones, en particular, se producen cuando el código que se está ejecutando viola de alguna manera las restricciones que tiene Java como lenguaje de programación.
Es vital aprender el manejo de las excepciones en Java para crear aplicaciones que funcionen y resuelvan las necesidades para las que fueron diseñadas.
Java cuenta con excepciones predefinidas (IOException) que muestran a quien está programando que hay operaciones que no se están llevando a cabo de una manera correcta.
Por otro lado, también se pueden crear excepciones para que el código se ejecute aún en caso de presentarse ciertos fallos
Una excepción no verificada es una incidencia que se produce durante la ejecución del programa (runtime) que interrumpe el flujo de las instrucciones. Este tipo de excepciones pueden ser capturadas y manejadas para que el código se ejecute hasta el final.
En el siguiente código hay un típico ejemplo de una excepción no verificada o generada durante la ejecución:
public class Main {
public static void main(String[] args) {
dividir(4, 0);
}
public static int dividir(int A, int B) {
return A / B;
}
}
Al ejecutar este código, Java detendrá la ejecución del programa y arrojará un mensaje informando que se ha producido una ArithmeticException al intentar dividir un número entre cero. Esto puede ser manejado así:
Una de las maneras de gestionar una excepción no verificada o runtime de Java es usando la construcción try … catch que permite evaluar un bloque de código y arroja un mensaje si hay algún problema que impida entregar el resultado esperado.
Siguiendo con el ejemplo anterior:
public class Main {
public static void main(String[] args) {
dividir(4, 0);
}
public static int dividir(int A, int B) {
int resultado = 0;
try { // bloque de instrucciones a evaluar
resultado = A / B;
System.out.println("El resultado es: " + resultado);
} catch (ArithmeticException e) { //se crea un objeto de la clase mencionada
System.out.println("No se puede dividir entre 0");
}
return resultado;
}
}
Otra forma de resolver esto es usando para ello la sentencia throws que señala la posibilidad de que se presenten una o varias excepciones y gestiona su manejo.
En el uso de esta sentencia se debe indicar el tipo de las excepciones que posiblemente se presenten:
Mostrando esto con el ejemplo que se ha usado hasta ahora:
public class Main {
public static void main(String[] args) {
try {
dividir(4, 0);
} catch (ArithmeticException e) {
System.out.println("No es posible hacer esta operación");
}
}
public static int dividir(int A, int B) throws ArithmeticException {
int resultado = 0;
try { // bloque de instrucciones a evaluar
resultado = A / B;
System.out.println("El resultado es: " + resultado);
} catch (ArithmeticException e) {
throw new ArithmeticException(); //se crea un objeto de esa excepción
}
return resultado;
}
}
En Java el manejo de excepciones se gestiona utilizando las palabras: try, catch, throw y throws.
La manera correcta de hacerlo es: