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()
.