Excepciones marcadas y no marcadas en Java

1. Información general

Las excepciones de Java se dividen en dos categorías principales: excepciones marcadas y excepciones no marcadas . En este artículo, proporcionaremos algunos ejemplos de código sobre cómo usarlos.

2. Excepciones marcadas

En general, las excepciones marcadas representan errores fuera del control del programa. Por ejemplo, el constructor de FileInputStream lanza FileNotFoundException si el archivo de entrada no existe.

Java verifica las excepciones comprobadas en tiempo de compilación.

Por lo tanto, deberíamos usar la palabra clave throws para declarar una excepción marcada:

private static void checkedExceptionWithThrows() throws FileNotFoundException { File file = new File("not_existing_file.txt"); FileInputStream stream = new FileInputStream(file); }

También podemos usar un bloque try-catch para manejar una excepción marcada:

private static void checkedExceptionWithTryCatch() { File file = new File("not_existing_file.txt"); try { FileInputStream stream = new FileInputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); } }

Algunas excepciones comprobadas comunes en Java son IOException , SQLException y ParseException .

La clase Exception es la superclase de excepciones comprobadas. Por lo tanto, podemos crear una excepción comprobada personalizada extendiendo Exception :

public class IncorrectFileNameException extends Exception { public IncorrectFileNameException(String errorMessage) { super(errorMessage); } } 

3. Excepciones sin marcar

Si un programa lanza una excepción no verificada, refleja algún error dentro de la lógica del programa. Por ejemplo, si dividimos un número entre 0, Java arrojará ArithmeticException :

private static void divideByZero() { int numerator = 1; int denominator = 0; int result = numerator / denominator; } 

Java no verifica las excepciones no comprobadas en tiempo de compilación. Además, no tenemos que declarar excepciones no comprobadas en un método con la palabra clave throws . Y aunque el código anterior no tiene ningún error durante el tiempo de compilación, lanzará ArithmeticException en tiempo de ejecución.

Algunas excepciones comunes no comprobadas en Java son NullPointerException , ArrayIndexOutOfBoundsException e IllegalArgumentException .

La clase RuntimeException es la superclase de todas las excepciones no marcadas. Por lo tanto, podemos crear una excepción personalizada sin verificar extendiendo RuntimeException :

public class NullOrEmptyException extends RuntimeException { public NullOrEmptyException(String errorMessage) { super(errorMessage); } }

4. Cuándo usar excepciones marcadas y excepciones no marcadas

Es una buena práctica usar excepciones en Java para que podamos separar el código de manejo de errores del código normal. Sin embargo, debemos decidir qué tipo de excepción lanzar. La documentación de Oracle Java proporciona orientación sobre cuándo usar excepciones marcadas y excepciones no marcadas:

“Si es razonable esperar que un cliente se recupere de una excepción, conviértala en una excepción marcada. Si un cliente no puede hacer nada para recuperarse de la excepción, conviértala en una excepción sin marcar ".

Por ejemplo, antes de abrir un archivo, primero podemos validar el nombre del archivo de entrada. Si el nombre del archivo de entrada del usuario no es válido, podemos lanzar una excepción de verificación personalizada:

if (!isCorrectFileName(fileName)) { throw new IncorrectFileNameException("Incorrect filename : " + fileName ); } 

De esta forma, podemos recuperar el sistema aceptando otro nombre de archivo de entrada de usuario. Sin embargo, si el nombre del archivo de entrada es un puntero nulo o es una cadena vacía, significa que tenemos algunos errores en el código. En este caso, deberíamos lanzar una excepción sin marcar:

if (fileName == null || fileName.isEmpty()) { throw new NullOrEmptyException("The filename is null or empty."); } 

5. Conclusión

En este artículo, analizamos la diferencia entre excepciones marcadas y no marcadas. También proporcionamos algunos ejemplos de código para mostrar cuándo usar excepciones marcadas o no marcadas.

Como siempre, todo el código que se encuentra en este artículo se puede encontrar en GitHub.