Catch 및 finally 절의 예외 처리
Java에서 예외 처리를 처리할 때는 catch 절과 finally 절 간의 상호 작용을 파악하는 것이 중요합니다. . 대학 과제에 대해 제공된 다음 예를 고려하십시오.
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();
}
}
}
이 코드의 출력에 대해 묻는 질문입니다. 일부에서는 "스레드 메인 MyExc2의 13예외"라고 대답했을 수도 있지만 정답은 "스레드 메인 MyExc1의 132예외"입니다.
MyExc2가 사라지는 이유
이해의 열쇠 올바른 출력은 catch 및 finally 절의 동작에 있습니다. catch 또는 finally 블록 내에서 예외가 발생하면 흐름에 중요한 영향을 미칩니다. 분석은 다음과 같습니다.
finally 블록의 예외: 마찬가지로, 새로운 예외가 발생하는 경우 finally 블록이 있으면 원래 예외도 중단됩니다. 그러나 주의해야 할 중요한 점이 있습니다:
예외 추적
이러한 원칙을 기반으로 실행을 추적하면 다음을 확인할 수 있습니다.
main의 Catch 블록:
마지막으로 메인 블록:
따라서 올바른 출력은 "스레드 메인 MyExc1의 132Exception"입니다. MyExc2 예외는 MyExc2를 처리하던 catch 블록의 finally 블록에서 새로운 예외(MyExc1)가 발생하기 때문에 "잊혀졌습니다".
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3