Catch 和Final 區塊中的異常傳播
在Java 程式中,當發生異常時,它會透過堆疊處理為止通過合適的catch 區塊或終止程序。但是,異常也可以在 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(); // Exception thrown in catch block } finally { System.out.print(2); throw new MyExc1(); // Exception thrown in finally block } } static void q() throws Exception { try { throw new MyExc1(); } catch (Exception y) { } finally { System.out.print(3); throw new Exception(); // Exception thrown in finally block } } }</code>
當在catch 或finally 區塊中引發異常時finally 區塊中,適用以下原則:
異常覆蓋: 如果在catch 或finally 區塊中拋出一個新的異常,並且打算傳播到該區塊之外,則當前異常正在處理中將被中止,新的異常將向外傳播,取代它的位置。中止的異常將被丟棄。
在提供的程式碼中,catch 和finally 區塊中的異常場景示範了這個原理:
- Catch 區塊:當catch 區塊內拋出異常i 時,它立即被新異常MyExc2 替換,成為正在進行的異常。
- Finally Block: 同樣,當拋出異常時在finally塊中,它用MyExc1替換了當前的MyExc2異常,使其成為正在進行中的新異常。
因此,當程式執行到展開堆疊後的main方法時,MyExc2異常已被 MyExc1 覆蓋,隨後被列印和處理。因此,正確的輸出是「132Exception in thread main MyExc1.」
以上是當 Java 中的 catch 和 finally 區塊中拋出異常時,異常傳播如何運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

記事本++7.3.1
好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版