Dúvida sobre Try Catch

É possível capturar duas exceções no mesmo catch? Estou tentando fazer da forma abaixo, mas não estou conseguindo.

Por exemplo:

try {
...
} catch (Exceção1 e && Exceção2 e2) {
....
}
1 curtida

É possível sim!

(Observação: é possível tratar mais de uma exceção com um único catch, mas o java sempre vai capturar uma única exception por vez).

Segue exemplo abaixo:

try {
    //Implementação
} catch (Excecao1 | Excecao2 | Excecao3 excecoes) {
    //Implementação
}

Não, você sempre vai capturar uma só.
Até, por quê, quando uma exceção for lançada, o runtime do java, imediatamente, joga no catch (quando se usa try/catch compatível com o tipo de exceção lançada).

voce pode usar mais de um catch para capturar mais de uma exceção:
try {

} catch (IndexOutOfBoundsException e) {
System.err.println("IndexOutOfBoundsException: " + e.getMessage());
} catch (IOException e) {
System.err.println("Caught IOException: " + e.getMessage());
}

Há algumas regras para ele cair na segunda exception que você tem que procurar como sobre hierarquia de exceptions, mas isso é entrando mais a fundo depois pesquise sobre essa hierarquia que existe se tiver curiosidade, porem a forma acima seria a maneira de trabalhar com mais de uma exception como mostra na documentação do java:
https://docs.oracle.com/javase/tutorial/essential/exceptions/catch.html

Insisto.
Sempre será capturada uma única exceção e será a primeira a ser lançada.
Com relação à forma antiga de capturar exceções, ela foi sintetizada para a maneira como o @Jonathan_Medeiros sugeriu. A ordem na qual as exceções passíveis de captura são colocadas deve seguir a hierarquia (mais especializadas à esquerda e mais abrangentes à direita).

Mesmo que você tenha

try {
     //Faz algo
} catch (ClassNotFoundException | FileNotFoundException | IOException ex) {
    //Faz outro algo
} 

A exceção capturada será uma das três acima, a primeira que tiver sido lançada. Sempre.

1 curtida

Verdade darlan, não tinha reparado essa nova forma na documentação:

Catching More Than One Type of Exception with One Exception Handler
In Java SE 7 and later, a single catch block can handle more than one type of exception. This feature can reduce code duplication and lessen the temptation to catch an overly broad exception.

In the catch clause, specify the types of exceptions that block can handle, and separate each exception type with a vertical bar (|):

catch (IOException|SQLException ex) {
logger.log(ex);
throw ex;
}

2 curtidas