Lance Exceção Múltipla em Java

Mohd Ebad Naqvi 12 outubro 2023
Lance Exceção Múltipla em Java

Este tutorial demonstrará como lançar várias exceções em Java.

As exceções são os eventos indesejados e inesperados que interrompem o fluxo normal das instruções durante a execução do programa. A classe raiz de todas as exceções Java é java.lang.Throwable. Esta classe é herdada pelas subclasses de erro e exceção.

Para lidar com exceções, usamos os blocos try...catch.

No bloco try, colocamos o código que pode gerar alguma exceção. O bloco try não é usado sozinho. Deve sempre ser seguido por catch ou finally. O bloco catch é usado para capturar a exceção. Este bloco pode ser seguido pelo bloco finally. O bloco finally é usado para executar o código importante do programa, independentemente de haver uma exceção ou não.

Em Java, podemos ter que lidar com várias exceções. Não é possível lançar várias exceções em Java. Podemos especificar várias exceções, mas apenas uma delas será lançada.

No entanto, temos algumas alternativas que podemos usar para simular o lançamento de múltiplas exceções.

Podemos usar exceções encadeadas para lidar com várias exceções. Essas exceções indicam que a exceção gerada é causada por outra exceção.

Por exemplo,

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());
    }
  }
}

Produção:

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

Observe o uso dos métodos initCause() e getCause(). A função initCause() define a causa da exceção como outra exceção e o getCause() retornará a causa da exceção, em nosso caso sendo NullPointerException.

Também podemos usar exceções suprimidas. Aqui, anexamos exceções suprimidas à exceção primária. Ele foi adicionado no Java 7.

Para anexar exceções suprimidas, usamos a função addSuppressed(). Usamos essa função com o objeto de exceção principal.

Por exemplo,

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]);
      }
    }
  }
}

Produção:

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

No exemplo acima, anexamos duas exceções ao objeto principal e imprimimos as exceções suprimidas. Para obter todas as exceções suprimidas, usamos a função getSuppressed().

Artigo relacionado - Java Exception