日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java异常捕获的一点感悟

發布時間:2023/12/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java异常捕获的一点感悟 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自? ?java異常捕獲的一點感悟

class Annoyance extends Exception {} class Sneeze extends Annoyance {} class Human { public static void main(String[] args) throws Exception { try { try { throw new Sneeze(); } catch ( Annoyance a ) { System.out.println("Caught Annoyance"); throw a; } } catch ( Sneeze s ) { System.out.println("Caught Sneeze"); return ; } finally { System.out.println("Hello World!"); } } }

今天看到這么一段代碼,請問輸出的內容是什么?

先別給出答案,思考一下平時我們寫代碼的過程中,異常捕獲的過程和順序,比如有這么一段代碼:

try { throw new FileNotFoundException(); } catch (IOException e) { } 我們經常能看到這樣的代碼,也就是使用父類能夠捕獲子類的異常,當然所有的異常都是繼承Exception的,那么為什么不用Exception替換所有具體的異常類呢?這個是要考慮到我們對代碼中預期異常的掌握,也就是某些代碼會產生什么樣的異常,程序員應當心中有數,如果全都用Exception的引用來接收,大家都是稀里糊涂的,如何進行處理也會變得難以著手。但如果在Catch代碼塊中不打算做任何處理,僅捕獲而已,那么這時使用Exception也沒什么關系,但正是生產環境下,這樣的情況應該不允許存在的,這個看JDK的源碼就知道了,捕獲異常以后一定要給出提示信息的。

以上的代碼證明了,我們可以用父類的引用接受子類的異常對象,那么問題來了,最上面的代碼執行結果是什么呢?答案是:

Caught Annoyance??
Caught Sneeze??

Hello World!??

相信第一行和第三行大家都沒什么疑問了,關鍵是第二行,應該出來嗎?是不是子類捕獲了父類的異常呢?

經過斷點的加入,我們發現,盡管

catch ( Annoyance a )??

這一句使用的是父類的引用,但實際上是子類的對象,這是java中多態的經典表現。在

catch ( Sneeze s )??

的時候當然可以捕獲到自己拋出來的異常了。

為了證明,子類從本質上無法捕獲父類的異常,我們繼續做個試驗:

try { throw new Annoyance(); } catch (Sneeze s) { System.out.println("Caught Sneeze"); return; } finally { System.out.println("Hello World!"); }

可以看到,拋出了父類的異常,使用子類catch,這時候可以通過編譯,但運行時呢?

Hello World!??
Exception in thread "main" com.xq.exceptions.Annoyance??
? ? at com.xq.exceptions.Human.main(ExceptionTest.java:14)??

可以看到,出了問題了,也就是說,父類throw出來的異常,子類并沒有捕獲到,繼續往下證明:

try { throw new Annoyance(); } catch (Sneeze s) { System.out.println("Caught Sneeze"); return; } catch (Exception e) { System.out.println("Caught Exception"); return; } finally { System.out.println("Hello World!"); } 既然子類捕獲不了,那就使用Exception,可以看到結果如下:

Caught Exception
Hello World!


總結

以上是生活随笔為你收集整理的java异常捕获的一点感悟的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。