Manejo de excepciones en las cláusulas Catch y Finalmente
Cuando se trata del manejo de excepciones en Java, es crucial comprender la interacción entre las cláusulas catch y finalmente . Considere el siguiente ejemplo proporcionado para una tarea universitaria:
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 pregunta solicitaba el resultado de este código. Si bien algunos pueden haber respondido "13Excepción en el hilo principal MyExc2", la respuesta correcta es "132Excepción en el hilo principal MyExc1".
Por qué desaparece MyExc2
La clave para entender el resultado correcto radica en el comportamiento de las cláusulas catch y finalmente. Cuando se produce una excepción dentro de un bloque catch o finalmente, tiene implicaciones importantes en el flujo. Aquí hay un desglose:
Excepción en el bloque finalmente: De manera similar, si se lanza una nueva excepción un bloque finalmente, la excepción original también se cancela. Sin embargo, hay un punto crucial a tener en cuenta:
Seguimiento del Excepciones
Al rastrear la ejecución según estos principios, podemos ver que:
Catch bloque en principal:
Finalmente bloque en principal:
Por lo tanto, la salida correcta es "132Exception en el hilo principal MyExc1". La excepción MyExc2 se "olvida" porque se lanza una nueva excepción (MyExc1) en el bloque finalmente del bloque catch que manejaba MyExc2.
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