Capturando Exceções com superclasses

5 respostas
R

Tenho um exercício que é o seguinte:

Ainda estou meio confuso com esse assunto de tratamento de erros.Mas esse exercício é como se fosse:
a classe ExceptionA fosse a Classe Exception(da API)
e as classes ExceptionB e C fossem as suas subclasses?

Dúvida:
Por exemplo se eu criasse um catch:
catch(Exception exception)
e desse uma exceção de IOException(que é subclasse)ela ia iria capturar?

E como se fosse uma forma mais generalizada?

Todas as classes de exceção que eu precisar criar precisa herda Throwable?

5 Respostas

Rafael_Nunes

Aqui é questão de interpretação de texto.
ExceptionA vai herdar de Exception.
ExceptionB herda de ExceptionA
ExceptionC herda de ExceptionB

Sim, mas o problema é que toda Exception é subclasse de Exception, logo, este catch capturaria qualquer Exception que fosse lançada.

Ao contrário, você captura da mais específica para a mais genérica:
Por exemplo no seu exercício, você deveria capturar primeiro ExceptionC, depois ExceptionB, depois ExceptionA e depois Exception.

Não, basta herdar de Exception(ou RuntimeException - aqui você precisa ler um pouco sobre exceções checadas e não checadas). A própria classe Exception ja herda de Throwable.

Paulo_Silveira

Aqui tem um link legal sobre boas praticas:
http://blog.caelum.com.br/2006/10/07/lidando-com-exceptions/

Voce tem de herdar direta ou indiretamente de Throwable sim, mas pode ser de qualquer uma das filhas, netas, etc… (acho que era isso que ele queria perguntar Nunes)

Rafael_Nunes

Para trabalhar com lançamento e captura de Exceptions, como ele precisa, ele deve herdar de Exception/RuntimeException(que herdam de Throwable e indiretamente ele acaba herdando como você disse), mas herdando diretamente de Throwable, ele não está trabalhando exatamente com Exceptions, e sim com objetos que podem ser lançados -no caso ou uma Exception ou um Error-. Certo?

Paulo_Silveira

Para trabalhar com lançamento e captura de Exceptions, como ele precisa, ele deve herdar de Exception/RuntimeException(que herdam de Throwable e indiretamente ele acaba herdando como você disse), mas herdando diretamente de Throwable, ele não está trabalhando exatamente com Exceptions, e sim com objetos que podem ser lançados -no caso ou uma Exception ou um Error-. Certo?

Sim, como ele precisa ele deve herdar de Exception, mas minha frase foi mais conceitual, e quis dizer que ele eh obrigado herdar de Throwable pra funcionar, de uma maneira ou de outra, nao que ele deva fazer isso diretamente.

A spec da JVM eh tao zuada nesse ponto, que nem define se herdando de Throwable temos uma checked ou unchecked. A JVM da sun e o javac da sun considera checked.

R

Obrigado pelas respostas

Criado 9 de abril de 2008
Ultima resposta 10 de abr. de 2008
Respostas 5
Participantes 3