Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Sobre o tópico 1 da aula 5: Capturando qualquer exceção

Eu queria saber porque que na classe "fluxoComErro" a classe "MInhaExcecao" não é necessária no try catch, mas na classe "fluxo" sim, além do "throws MinhaExcecao" no método1 do "fluxo", que é necessário, mas na classe "fluxoComErro" não. O professor cita isso a partir do minuto 10.

public class fluxoComErro {
    public static void main(String[] args) {
        System.out.println("Ini do main");
        try {
            metodo1();

        } catch (ArithmeticException | NullPointerException ex) {
            String msg = ex.getMessage();
            System.out.println("Exception " + msg);
            ex.printStackTrace();
        }
        System.out.println("Fim do main");
    }

    private static void metodo1() {
        System.out.println("Ini do metodo1");
        metodo2();
        System.out.println("Fim do metodo1");
    }

    private static void metodo2() {
        System.out.println("chamando o método 2");
        metodo2();
        System.out.println("fim do método 2");
    }
}
2 respostas
solução!

Olá Matheus, tudo bem com você?

Como nenhum dos métodos de fluxoComErro joga uma exceção MinhaExcecao, não existe a necessidade de tratá-la. Perceba que tanto o metodo1() quanto o metodo2() em nenhum momento jogam a exceção MinhaExcecao.

Já na classe Fluxo, o metodo1() chama o metodo2() que, por sua vez, joga a MinhaExcecao. Portanto, essa exceção vai subindo na pilha até precisar ser tratada no método main().

public static void main(String[] args) {
    System.out.println("Ini do main");
    try {
        metodo1();
    } catch(ArithmeticException | NullPointerException | MinhaExcecao ex) {
        String msg = ex.getMessage();
        System.out.println("Exception " + msg);
        ex.printStackTrace();
    }
    System.out.println("Fim do main");
}

Resumindo:

  • Nenhum método da classe FluxoComErro joga a MinhaExcecao, portanto não precisamos tratá-la;

  • Já a classe Fluxo joga a MinhaExcecao no método2(), portanto precisamos tratá-la no método main() antes que ela exploda no usuário.

Fez sentido? Se ficou alguma dúvida é só avisar!

Forte abraço e bons estudos!!

Opa, entendi Thiago. Muito obrigado!