Eu estou estudando pelo livro “Java, how to program”. Me surgiu uma dúvida no tratamento de exceções, com relação às seguintes afirmações do livro:
Afirmação 1:
It’s a compilation error to catch the
exact same type in two different catch blocks associated with a particular try block.
Afirmação 2:
Catching subclass types individually is subject to error if you forget to test for one or more
of the subclass types explicitly; catching the superclass guarantees that objects of all subclasses
will be caught. Positioning a catch block for the superclass type after all other subclass
catch blocks ensures that all subclass exceptions are eventually caught.
Na afirmação 1, ele diz que ocorre um erro se dois catch’s correspondentes a um mesmo tipo de exceção estão relacionados a ao mesmo bloco try.
Na afirmação 2, diz que pode colocar um catch “pai” depois dos catch’s “filhos”.
Aí o que me deixou em dúvida foi o seguinte código que fiz:
Criei trê novas exceções que descendem de Exception:
- ExceptionA extends Exception
- ExceptionB extends A
- ExceptionC extends B
depois, fiz o teste na classe main:
try
{
throw new ExceptionC();
}
catch(ExceptionC e)
{
System.out.printf(“Captando o erro do tipo ExceptionC”);
}
catch(ExceptionA e)
{
System.out.printf(“Captando o erro do tipo ExceptionA”);
}
Quando vou compilar, o código da o seguinte erro:
unreachable catch clause
catch(ExceptionA e)
Eu não entendi o porque do erro, e por isso copiei as passagens do livro. Cheguei à conclusão de que o erro de compilação ocorre porque a classe ExceptionC é um ExceptionA. Mas outra parte do livro diz que pode colocar a classe pai abaixo das filhas.
Fiz outro teste: no lugar da classe ExceptionA, coloquei apenas Exception e o programa compilou normalmente.
Alguém sabe me explicar o motivo desse erro?