Java의 예외 처리: 모호함 풀기
어리석은 Java 예외 처리 시나리오에서 대학 질문에는 다음 코드 조각이 제시되었습니다.
// 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();
}
}
}
질문에서 출력을 요청했으며 제공된 답변은 "13Exception in thread main MyExc2"였습니다. 그러나 정답은 "132Exception in thread main MyExc1"입니다.
모호성 명확화
이 퍼즐을 해독하려면 예외의 우선 순위를 이해하는 것이 중요합니다.
결과:
실행 재추적
이 원칙을 코드에 적용:
초기의 실행:
Catch 블록 예외:
Main의 Try 블록에서 실행이 다시 시작됩니다.
Finally Block Exception:
출력:
최종 출력 메인 메소드 밖으로 전파되는 예외는 라인에서 던져진 MyExc1이기 때문에 "스레드 메인 MyExc1의 132Exception"입니다. 16. 19번째 라인에 던져진 MyExc2는 16번째 라인에서 MyExc1이 던져지면 중단됩니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3