Tratamento de exceções em Java: desvendando a ambigüidade
Em um cenário intrigante de tratamento de exceções Java, uma pergunta universitária apresentou o seguinte trecho de código:
// Exception Heirarchy
class MyExc1 extends Exception {}
class MyExc2 extends Exception {}
class MyExc3 extends MyExc2 {}
// Main Class
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 sua saída e a resposta fornecida foi "13Exception no thread principal MyExc2". No entanto, a resposta correta é "132Exception no thread principal MyExc1".
Esclarecendo a ambigüidade
Para decifrar esse quebra-cabeça, é essencial entender a precedência das exceções:
Consequências :
Refazendo a execução
Aplicando este princípio ao código:
Execução inicial:
Catch Block Exceção:
A execução é retomada no bloco Try do Main:
Finally Block Exception:
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