Catch 및 finally 절의 예외 처리
Java에서 예외 처리를 처리할 때 catch 절과 finally 절 간의 상호 작용을 파악하는 것이 중요합니다. . 대학 과제에 대해 제공된 다음 예를 고려하십시오.
<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"입니다.
MyExc2가 사라지는 이유
이해의 열쇠 올바른 출력은 catch 및 finally 절의 동작에 있습니다. catch 또는 finally 블록 내에서 예외가 발생하면 흐름에 중요한 영향을 미칩니다. 자세한 내용은 다음과 같습니다.
finally 블록의 예외: 마찬가지로, 새로운 예외가 발생하는 경우 finally 블록이 있으면 원래 예외도 중단됩니다. 그러나 주의해야 할 중요한 사항이 있습니다:
예외 추적
이러한 원칙을 기반으로 실행을 추적하면 다음을 확인할 수 있습니다.
main의 Catch 블록:
마지막으로 메인 블록:
따라서 올바른 출력은 "132Exception in thread main MyExc1"입니다. MyExc2 예외는 MyExc2를 처리하던 catch 블록의 finally 블록에서 새로운 예외(MyExc1)가 발생하기 때문에 "잊혀졌습니다".
위 내용은 이 Java 예외 처리 예제에서 `MyExc2` 예외가 사라지는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!