Lanzar excepciones múltiples en Java

Mohd Ebad Naqvi 12 octubre 2023
Lanzar excepciones múltiples en Java

Este tutorial demostrará cómo lanzar múltiples excepciones en Java.

Las excepciones son los eventos no deseados e inesperados que interrumpen el flujo normal de las instrucciones durante la ejecución del programa. La clase raíz de todas las excepciones de Java es java.lang.Throwable. Esta clase la heredan las subclases de error y excepción.

Para manejar las excepciones, usamos los bloques try...catch.

En el bloque try colocamos el código que puede generar alguna excepción. El bloque try no se utiliza solo. Siempre debe ir seguido de catch o finally. El bloque catch se utiliza para capturar la excepción. Este bloque puede ir seguido del bloque finalmente. El bloque finally se utiliza para ejecutar el código importante del programa sin importar si hay una excepción o no.

En Java, es posible que tengamos que lidiar con múltiples excepciones. No es posible lanzar numerosas excepciones en Java. Podemos especificar varias excepciones, pero solo se lanzará una de ellas.

Sin embargo, tenemos algunas alternativas que podemos usar para simular el lanzamiento de múltiples excepciones.

Podemos usar excepciones encadenadas para tratar con múltiples excepciones. Tales excepciones indican que la excepción planteada es causada por otra excepción.

Por ejemplo,

public class Main {
  public static void main(String[] args) {
    try {
      NumberFormatException ex = new NumberFormatException("NumberFormatException is thrown");
      ex.initCause(new NullPointerException("NullPointerException is the main cause"));
      throw ex;
    }

    catch (NumberFormatException ex) {
      System.out.println(ex);
      System.out.println(ex.getCause());
    }
  }
}

Producción :

java.lang.NumberFormatException: NumberFormatException is raised
java.lang.NullPointerException: NullPointerException is the main cause

Tenga en cuenta el uso de los métodos initCause() y getCause(). La función initCause() establece la causa de la excepción como otra excepción y getCause() devolverá la causa de la excepción, en nuestro caso es NullPointerException.

También podemos utilizar excepciones suprimidas. Aquí adjuntamos excepciones suprimidas a la excepción principal. Se agregó en Java 7.

Para adjuntar excepciones suprimidas, usamos la función addSuppressed(). Usamos esta función con el objeto principal de excepción.

Por ejemplo,

import java.io.*;
class Main {
  public static void main(String[] args) throws Exception {
    try {
      Exception suppressed = new NumberFormatException();
      Exception suppressed2 = new NullPointerException();

      final Exception exe = new Exception();

      exe.addSuppressed(suppressed);
      exe.addSuppressed(suppressed2);
      throw exe;

    }

    catch (Throwable e) {
      Throwable[] suppExe = e.getSuppressed();
      System.out.println("Suppressed:");
      for (int i = 0; i < suppExe.length; i++) {
        System.out.println(suppExe[i]);
      }
    }
  }
}

Producción :

Suppressed:
java.lang.NumberFormatException
java.lang.NullPointerException

En el ejemplo anterior, adjuntamos dos excepciones al objeto principal e imprimimos las excepciones suprimidas. Para obtener todas las excepciones suprimidas, usamos la función getSuppressed().

Artículo relacionado - Java Exception