Cursos / Eletrônica / Programação Orientada a Objetos / Aula

arrow_back Aula 12 - Lançamento de Exceções

Capturando Múltiplas Exceções

Por essa você não esperava! Você sabia que um método pode lançar várias exceções? Pois é, um método poderá lançar quantas exceções sejam necessárias. Mas, na declaração do método, será obrigatório informar cada uma delas, contudo, se duas ou mais exceções possuem uma superclasse em comum, então, nesse caso o método pode declarar apenas as superclasses na cláusula throws.

No código acima, temos um exemplo de um método lançando mais de uma exceção, considerando que ExcecaoCalca e ExcecaoCamisa fossem filhas de ExcecaoRoupa, o mesmo código poderia ser escrito da seguinte forma.

Como consequência desse fato, quem utilizar-se desse método deverá capturar cada uma das exceções. Mais um detalhe, a ordem em que você captura as múltiplas exceções dentro do bloco catch é de extrema importância, mas veremos isso com mais detalhes adiante. Vamos dar uma olhada na sintaxe para capturar várias exceções em um único bloco try/catch.

Veja que no código acima colocamos duas cláusulas catch, isso porque o método lavanderia.lavar() poderá lançar tanto ExcecaoCalca quanto ExcecaoCamisa. Observe que neste caso não importa a ordem em que as capturamos no bloco catch, pois ambas possuem o mesmo nível de hierarquia, ou seja, são subclasses de ExcecaoRoupa. Sendo assim, esse mesmo código também poderia ser escrito da seguinte maneira.

Note que agora temos apenas um bloco catch tratando a ExcecaoRoupa. Como essa última é superclasse de ambas as exceções (ExcecaoCalca e ExcecaoCamisa), eu posso simplificar meu código capturando apenas uma exceção que seja superclasse das demais.

Esse tipo de abstração também tem as suas desvantagens. Perceba que dessa forma daremos o mesmo tratamento para ambos os tipos de exceções. Sendo assim, se quisermos especificar um tratamento diferenciado de acordo com a exceção levantada, temos que de fato utilizar múltiplas cláusulas catch.

Versão 5.3 - Todos os Direitos reservados