3
respostas

Capturando qualquer exceção

Queria entender, por que eu coloquei o throws na assinatura do método deposita da classe conta. E não estende a classe Exception. Isso seria porque na classe MinhaExcecao já estende para a classe Exception, o compilador entende que não precisa estender de novo o classe e só inserir a assinatura do método throws para capturar a exeção.

public class Conta{

void deposita() throws MinhaExcecao{

}

}

3 respostas

throws na assinatura do método significa que a exceção MinhaExcecao é do tipo checked, ou seja, precisa ser tratada, e esse método está devolvendo essa exceção para quem o chamou, no caso o método main() que necessariamente precisa tratá-la com um bloco try/catch ou lancá-la novamente com o throws em sua assinatura.

Certo, ficou claro quando temos uma exceção do tipo throws temos que tratar.

O que eu não consegui entender foi, por que na classe Conta não herdamos da classe Exception, só colocamos a assinatura do método.

Somente a classe que será a exceção em si deve estender de classes do tipo RuntimeException/Exception/etc, no caso a MinhaExcecao. Conta é a classe que possui suas regras de negócio, não é necessário estender uma exceção para poder lançá-la.