Tratamento de exceções em cláusulas Catch e Finalmente
Ao lidar com o tratamento de exceções em Java, é crucial compreender a interação entre as cláusulas catch e finalmente . Considere o seguinte exemplo fornecido para uma tarefa universitária:
class MyExc1 extends Exception {}
class MyExc2 extends Exception {}
class MyExc3 extends MyExc2 {}
public class C1 {
public static void main(String[] args) throws Exception {
try {
System.out.print(1);
q();
}
catch (Exception i) {
throw new MyExc2();
}
finally {
System.out.print(2);
throw new MyExc1();
}
}
static void q() throws Exception {
try {
throw new MyExc1();
}
catch (Exception y) {
}
finally {
System.out.print(3);
throw new Exception();
}
}
}
A pergunta solicitada para a saída deste código. Embora alguns possam ter respondido "13Exception no thread principal MyExc2", a resposta correta é "132Exception no thread principal MyExc1."
Por que MyExc2 desaparece
A chave para a compreensão a saída correta está no comportamento das cláusulas catch e finalmente. Quando uma exceção é lançada dentro de um bloco catch ou finalmente, isso tem implicações significativas no fluxo. Aqui está um detalhamento:
Exceção no bloco final: Da mesma forma, se uma nova exceção for lançada um bloco final, a exceção original também é abortada. No entanto, há um ponto crucial a ser observado:
Tracing the Exceptions
Traçando a execução com base nesses princípios, podemos ver que:
Catch bloco em main:
Finalmente bloco principal:
Portanto, a saída correta é "132Exception in thread main MyExc1." A exceção MyExc2 é "esquecida" porque uma nova exceção (MyExc1) é lançada no bloco final do bloco catch que estava manipulando o MyExc2.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3