Java: captura múltiples excepciones y vuelve a generar una excepción

En Java 7, el bloque catch se ha mejorado para manejar múltiples excepciones en un solo bloque catch. Si está capturando múltiples excepciones y tienen un código similar, entonces el uso de esta función reducirá la duplicación de código. Comprendamos la función de captura de múltiples excepciones de Java con un ejemplo.

Java detecta múltiples excepciones

Antes de Java 7, solíamos capturar múltiples excepciones una por una como se muestra a continuación.

catch (IOException ex) {     logger.error(ex);     throw new MyException(ex.getMessage());catch (SQLException ex) {     logger.error(ex);     throw new MyException(ex.getMessage());}

En Java 7, podemos capturar ambas excepciones en un único bloque catch de la siguiente manera:

catch(IOException | SQLException ex){     logger.error(ex);     throw new MyException(ex.getMessage());}

Si un bloque catch maneja múltiples excepciones, puede separarlas mediante una barra vertical (|) y, en este caso, el parámetro de excepción (ex) es final, por lo que no puede cambiarlo. El código de bytes generado por esta función es más pequeño y reduce la redundancia del código.

Excepción de relanzamiento de Java

Otra mejora se ha realizado en el análisis del compilador de excepciones relanzadas. La repetición de excepciones de Java permite especificar tipos de excepción más específicos en la cláusula throws de una declaración de método. Veamos esto con un pequeño ejemplo:

package com.journaldev.util;public class Java7MultipleExceptions {public static void main(String[] args) {try{rethrow("abc");}catch(FirstException | SecondException | ThirdException e){//below assignment will throw compile time exception since e is final//e = new Exception();System.out.println(e.getMessage());}}static void rethrow(String s) throws FirstException, SecondException,ThirdException {try {if (s.equals("First"))throw new FirstException("First");else if (s.equals("Second"))throw new SecondException("Second");elsethrow new ThirdException("Third");} catch (Exception e) {//below assignment disables the improved rethrow exception type checking feature of Java 7// e=new ThirdException();throw e;}}static class FirstException extends Exception {public FirstException(String msg) {super(msg);}}static class SecondException extends Exception {public SecondException(String msg) {super(msg);}}static class ThirdException extends Exception {public ThirdException(String msg) {super(msg);}}}

Como puede ver, en rethrowel método, el bloque catch captura la excepción, pero no es parte de la cláusula throws. El compilador de Java 7 analiza el bloque try completo para verificar qué tipos de excepciones se lanzan y luego se vuelven a lanzar desde el bloque catch. Tenga en cuenta que este análisis se deshabilita si cambia el argumento del bloque catch. Lectura adicional: Manejo de excepciones en Java .

SUSCRÍBETE A NUESTRO BOLETÍN 
No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio