Propagation des exceptions dans les blocs Catch et Enfin
Dans un programme Java, lorsqu'une exception se produit, elle se propage à travers la pile jusqu'à ce qu'elle soit gérée par un bloc catch approprié ou termine le programme. Cependant, des exceptions peuvent également être levées dans des blocs catch ou enfin, ce qui soulève des questions sur leur comportement de propagation.
Considérez l'extrait de code suivant :
<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(); // Exception thrown in catch block } finally { System.out.print(2); throw new MyExc1(); // Exception thrown in finally block } } static void q() throws Exception { try { throw new MyExc1(); } catch (Exception y) { } finally { System.out.print(3); throw new Exception(); // Exception thrown in finally block } } }</code>
Lorsqu'une exception est levée dans un catch ou final block, le principe suivant s'applique :
Exception Overriding : Si une nouvelle exception est levée dans un catch ou un bloc final destiné à se propager hors de ce bloc, l'exception actuelle est en cours sera avortée et la nouvelle exception se propagera vers l'extérieur, prenant sa place. L'exception abandonnée sera ignorée.
Dans le code fourni, le scénario d'exception dans les blocs catch et final démontre ce principe :
Par conséquent, lorsque l'exécution du programme atteint la méthode principale après avoir déroulé la pile, l'exception MyExc2 a a été remplacé par MyExc1, qui est ensuite imprimé et géré. 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!