1
resposta

Meu raciocínio está correto?

Olá Pessoal, estou com uma pequena dúvida. Quando eu coloco o Try Catch em um método e o Catch é executado ele descarta o restante das linhas de código daquele método mesmo que sejam linhas compiláveis, correto?

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeNeste exemplo acima, ele conseguiu fazer o primeiro numeral(1) do loop no método 2. E teve que utilizar o CATCH pois estávamos tentando dividir por zero. Ocorre que quando ele voltou, ele executou apenas o SYSOUT "ArithmeticException", descartou o SYSOUT do método 1 "Fim do Método 1" e pulou para o SYSOUT "Fim do main". O que houve com o SYSOUT "Fim do metodo1"?

1 resposta

Fala Ian, tudo certo?

Dentro de um bloco try-catch, quando o catch é executado, ou seja, o bloco try encontrou uma exceção, o que acontece é o seguinte: a exceção é jogada na pilha de execução e procura um tratamento, e enquanto ela não for tratada, não vai executar código nenhum até finalmente ser tratada, ou jogar um exceção que interrompa o programa.

Pra ficar mais claro, vamos fazer um teste de mesa:

  • Início da execução do metodo1()
    • sysout("ini método 1");
    • Início do metodo2()
      • sysout("ini método 2");
      • Encontra uma ArithmeticException // Inicia-se o processo de desempilhamento
      • metodo2() não tem tratamento de exceção, é desempilhado.
    • Exceção chega ao metodo1(), que também não tem tratamento de exceção e por esse motivo não executa nenhum código, apenas passa a exceção para baixo na pilha
  • Exceção chega ao método main(), que fez a chamada ao metodo1(). Aqui, existe um bloco try-catch para tratar essa exceção, e o bloco catch é executado, fazendo a impressão na tela da exceção tratada.
  • Como a exceção foi tratada, o método continua sua execução normalmente, e imprime "Fim do main"

Vale lembrar que caso não houvesse o bloco try-catch no método main(), este seria desempilhado também e a exceção pararia a execução do programa. Além disso, caso o bloco try-catch estivesse dentro do metodo1(), ele faria o tratamento de exceção e continuaria sua execução até o fim, isto é, faria o sysout("Fim do metodo1").

Em caso de dúvidas, estou à disposição!

Um grande abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓