Gestion des exceptions dans les blocs Catch et Enfin
Lors d'une récente mission Java universitaire, un étudiant a rencontré l'extrait de code suivant et a été invité à prédire sa sortie :
<code class="java">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(); } } }</code>
Lorsque l'étudiant a répondu par "13Exception dans le fil principal MyExc2", il a été surpris de découvrir que la bonne réponse était "132Exception dans le fil principal MyExc1."
Comprendre la propagation des exceptions dans les blocs Catch et Enfin
Pour comprendre le résultat correct, il est crucial de comprendre le comportement des exceptions dans les blocs Catch et Enfin. Selon le mécanisme de gestion des exceptions de Java :
Traçage du flux d'exception
Dans cet esprit, traçons l'exécution de l'extrait de code étape par étape :
Comprendre le résultat
De ce suivi, nous pouvons voir que :
Par conséquent, la sortie correcte est "132Exception dans le thread principal MyExc1."
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!