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

Se o ArithmeticException ex é uma referência, onde ele foi criado?

public class Fluxo {

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

            System.out.println("Fim do main");
        }

Como podemos referenciar o "ArithmeticException ex" se ele não foi criado por um "new"? ou o new é quando dá o erro em si? Alguém poderia me explicar isso?

4 respostas

Oi Igor

Nesse cenário, quando uma exception ocorrer dentro do bloco try, será o método metodo1() que dará um "throw new ArithmeticException()". O catch vai apenas receber esse objeto na referência "ex" como você mencionou

Opa, e aí Otávio, tranquilo? Não sei se entendi muito bem, dá uma olhada:

public class Fluxo {

            public static void main(String[] args) {
            System.out.println("Ini do main");
            try { metodo1();
            } catch (NullPointerException | ArithmeticException | MinhaExcecao ex){
                System.out.println("Exception " + ex.getMessage());
                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("Ini do metodo2");

            Conta c = new Conta();

            throw new MinhaExcecao("deu muito errado"); // sai da execução, joga a exceção
            //System.out.println("Fim do metodo2");
        }
    }

Será executado o main, o qual tentará executar o método 1. Este, por sua vez, chama o método 2. No método 2, na linha : throw new MinhaExcecao("deu muito errado"); eu posso apagar ela, que mesmo assim o código compila sem problemas.

Minha dúvida é na linha: catch (NullPointerException | ArithmeticException | MinhaExcecao ex){

A referência ex veio de onde se eu não instanciei nada? Ou o catch é tipo um método o qual eu passo parâmetros sendo, neste caso, esse parâmetro do tipo Null.. Arith.. ou MinhaExcecao que eu decidi chamar de ex?

Tipo como se fosse em um construtor (int senha), mas aqui: catch (NillPointerrException ex).

Resumindo tudo isso pra ficar mais fácil pra entender a minha pergunta kk, o que está dentro do parenteses do catch são os parâmetros que eu quero passar pra ele capturar, como se fosse qualquer outro método qualquer?

solução!

Oi Igor

É mais ou menos nessa linha mesmo, o catch é como se fosse um método que recebe argumentos, porém quem de fato chama o catch é a JVM por baixo dos panos, o seu código dando um throw new Exception a JVM vai pegar essa instância de Exception e passar para o catch()

Entendi, muito obrigado pela ajuda amigo. Bom final de semana aí hauaha