Catch 및 finally 블록의 예외 처리
최근 대학 Java 과제에서 한 학생이 다음 코드 조각을 접하고 예측하라는 요청을 받았습니다. 출력:
<code class="java">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(); } } }</code>
학생이 "스레드 메인 MyExc2의 13Exception"이라고 대답했을 때 정답이 "스레드 메인 MyExc1의 132Exception"이라는 사실을 알고 놀랐습니다.
Catch 및 finally 블록의 예외 전파 이해
올바른 출력을 이해하려면 catch 및 finally 블록 내의 예외 동작을 이해하는 것이 중요합니다. Java의 예외 처리 메커니즘에 따르면:
예외 흐름 추적
이를 염두에 두고 코드 조각의 실행을 단계별로 추적해 보겠습니다.
출력 이해
이 추적을 통해 다음을 확인할 수 있습니다.
따라서 올바른 출력은 "132Exception in thread main MyExc1"입니다.
위 내용은 MyExc2 예외가 catch 블록에 발생했음에도 불구하고 코드 조각이 \'132Exception in thread main MyExc1\' 출력을 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!