1
resposta

checked exception - problema com throws

Quando MinhaExcecao herda de Exception, ao utilizar o método deposita() terei duas formas de tratar a exceção no main, utilizando um try/catch ou lançando throws na assinatura do método correto? Veja o código abaixo:

public class TestaTratamentoTryCatch {
    public static void main(String[] args) {
        Conta conta = new Conta();
    //Esse seria o tratamento utilizando o try/catch
        try {
            conta.deposita();
            throw new MinhaExcecao("Minha exceção sendo usada");
        } catch (MinhaExcecao ex) {
            System.out.println(ex.getMessage());
            System.out.println("Tratamento...");
        }
    }

Agora vamos ao tratamento utilizando throws na assinatura do método que chamou o deposita(), no caso o main. Será necessário colocar um throws na assinatura do main.

public class TesteTratamentoThrows {
    public static void main(String[] args) throws MinhaExcecao {

        Conta conta = new Conta();
        conta.deposita();
        throw new MinhaExcecao("Usando minha excecao");
         //Nenhum código irá compilar a partir daqui.
    }
}

Agora o meu problema, nada que vier abaixo do throw irá compilar. Qual é então o sentido de fazermos o tratamento utilizando throws na assinatura?

Obrigado

1 resposta

Oi Frederico! Tudo bem?

No seu exemplo, realmente ele não teria muito propósito arremessar, porque quem está chamando o metodo main é a JVM.

Em cenários de verdade, existe uma pilha de execução. Vejamos... a seta representa a chamada.

metodo estático main -> Classe A.metodoA()

ClasseA.metodoA() -> ClasseB.metodoB()

ClasseB.metodoB() -> ClasseC.metodoC()

ClasseC.metodoC() = dá erro

1) o metodoC pode fazer alguma coisa para resolver o erro?

pode? coloca um try-catch e no erro faz o que precisa ser feito. (Logar, voltar uma transação, envio de e-mail, etc...)

não? Apenas arremessa o erro para que o metodoB possa saber que a execução do método C deu erro.

Vale lembrar que a ocorrência de exceção se traduz em operação não será realizada, logo quem pediu - como no seu exemplo - um depósito, deve saber que o deposito não foi realizado e por qual razão.

Os métodos precisam devolver as exceções correspondentes para os métodos a quem os chamou.

Espero ter ajudado,

Fico à disposição caso tenha dúvidas,

Abraço e sucesso,

Rodrigo