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(); // throws MyExc1 here } } static void q() throws Exception { try { throw new MyExc1(); // throws MyExc1 here } catch (Exception y) { } finally { System.out.print(3); throw new Exception(); // throws Exception here } } }
이 스니펫에는 try-catch 절과 finally 절 모두에서 일련의 예외가 발생합니다. 예상되는 출력은 "스레드 메인 MyExc2의 13Exception"이 아니라 "스레드 메인 MyExc1의 132Exception"입니다.
이 결과를 이해하려면 Java 예외 처리의 기본 원칙을 이해해야 합니다.
해당 블록 외부로 전파되는 catch 또는 finally 절 내에서 새 예외가 발생하면 현재 예외가 중단되고 대신 새 예외가 전파됩니다.
기본적으로 현재 예외는 잊어버립니다. 그리고 새로운 예외가 스택의 해제 프로세스를 인계받습니다.
주어진 코드에서 MyExc1 예외는 가장 안쪽의 finally 절에서 발생합니다. 이 예외는 결국 기본 finally 절까지 버블링됩니다. 그러나 해당 finally 절에서는 또 다른 예외인 MyExc1이 발생하여 원본 MyExc1의 전파가 중단됩니다. 따라서 가장 바깥쪽 finally 절의 MyExc1이 외부로 전파되는 예외가 됩니다.
위 내용은 finally 블록에서 발생한 예외가 Java에서 최종적으로 보고되는 예외인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!