Capturando várias exceções

Quando apresentou-se a estrutura do bloco try-catch, pode ter ficado a impressão que para cada exceção possivelmente gerada em um bloco try um bloco catch deveria ser declarado.

Graças ao polimorfismo, não é esse o caso. A cláusula catch sabe que deve receber como argumento um objeto da classe Throwable. Como um objeto da classe derivada "é-um" objeto da superclasse, qualquer objeto-exceção da classe especificada ou de suas classes derivadas podem ser capturadas por um catch.

Por exemplo, uma especificação

   catch (Exception e) {...}
implica na captura de todas as exceções, uma vez que a classe Exception é a raiz de todas as exceções.

Em geral, se dois blocos catches envolvem duas classes relacionadas na hierarquia de exceções, a superclasse deve vir após a classe derivada na seqüência de blocos catch. Portanto, se um bloco catch for incluído com argumento Exception, como acima, esse deve ser o último bloco na seqüência de catches.


© Ivan Luiz Marques Ricarte
DCA/FEEC/UNICAMP

Last modified: Mon Nov 8 12:28:51 EDT 1999