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 ✓