Gestion des exceptions dans les clauses Catch et Enfin
Lorsque vous traitez la gestion des exceptions en Java, il est crucial de comprendre l'interaction entre les clauses catch etfinal. . Prenons l'exemple suivant fourni pour un devoir universitaire :
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();
}
}
}
La question demandait la sortie de ce code. Même si certains ont peut-être répondu « 13Exception dans le fil principal MyExc2 », la bonne réponse est « 132Exception dans le fil principal MyExc1 ».
Pourquoi MyExc2 disparaît
La clé pour comprendre le résultat correct réside dans le comportement des clauses catch et enfin. Lorsqu'une exception est levée dans un bloc catch ou final, cela a des implications significatives sur le flux. Voici une répartition :
Exception dans le bloc final : De même, si une nouvelle exception est levée un bloc final, l'exception d'origine est également abandonnée. Cependant, il y a un point crucial à noter :
Traçage des exceptions
En traçant l'exécution sur la base de ces principes, nous pouvons voir que :
Bloc Catch dans main :
Enfin bloquer dans main :
Par conséquent, la sortie correcte est « 132Exception dans le thread principal MyExc1 ». L'exception MyExc2 est "oubliée" car une nouvelle exception (MyExc1) est levée dans le bloc final du bloc catch qui gérait MyExc2.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3