Java의 예외 처리: 모호함 풀기
어리석은 Java 예외 처리 시나리오에서 대학 질문에서는 다음 코드 조각을 제시했습니다.
<code class="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(); } } }</code>
출력에 대한 질문이 있었고 제공된 답변은 "13Exception in thread main MyExc2"였습니다. 그러나 정답은 "스레드 메인 MyExc1의 132Exception"입니다.
모호함 명확화
이 퍼즐을 해독하려면 예외의 우선 순위를 이해하는 것이 중요합니다.
결과 :
실행 재추적
이 원칙을 코드에 적용:
초기 실행:
Catch Block 예외:
Main의 Try 블록에서 실행 재개:
Finally 블록 예외:
출력:
최종 출력은 "132Exception in thread main MyExc1"입니다. 왜냐하면 외부로 전파되는 예외 때문입니다. 주요 메소드 중 하나는 16행에서 발생하는 MyExc1입니다. 19행에서 발생하는 MyExc2는 16행에서 MyExc1이 발생하면 중단됩니다.
위 내용은 Java 예외 처리 코드가 \'스레드 메인 MyExc2\'의 13Exception 대신 \'스레드 메인 MyExc1\'의 132Exception을 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!