Manejo de excepciones en Java: desentrañando la ambigüedad
En un desconcertante escenario de manejo de excepciones de Java, una pregunta universitaria presentó el siguiente fragmento 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();
}
}
}
La pregunta solicitó su resultado y la respuesta proporcionada fue "13Exception en el hilo principal MyExc2". Sin embargo, la respuesta correcta es "132Excepción en el hilo principal MyExc1".
Aclarando la ambigüedad
Para descifrar este acertijo, es esencial comprender la precedencia de las excepciones:
Consecuencias :
Volviendo sobre la ejecución
Aplicando este principio al código:
Ejecución inicial:
Bloque Catch Excepción:
La ejecución se reanuda en el bloque de prueba principal:
Excepción de bloqueo final:
Salida:
La salida final es "132Exception en el hilo principal MyExc1" porque la excepción que se propaga del método principal es MyExc1 arrojado en la línea 16. MyExc2 arrojado en la línea 19 se cancela cuando MyExc1 se lanza en la línea 16.Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3