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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

基础知识《十》unchecked异常和checked异常

發布時間:2025/3/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基础知识《十》unchecked异常和checked异常 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


Exception和繼承自Exception的RuntimeException有什么區別呢??
Java compiler要求所有的Exception 要么被catch,要么被throw,除非這是一個RuntimeExeption (e instanceof RuntimeException)。也就是說,通常的Exception一定要被處理,也即我們所說的 checked exception,而RuntimeException不強制要求處理,(當然你自己要處理也可以),所以我們稱為unchecked exception。?
之所以區分 checked/unchecked exception,JAVA的設計思想是區分從類/方法設計者角度來看兩種不同的異常:?
一種是設計者認為這個方法在使用過程中使用者能夠處理的異常,這些往往作為checked exception。比如一個IO系統的設計者會認為諸如物理文件不存在或者介質無法讀取等異常時很可能發生,而使用者完全可能捕獲這個異常,通過讓用戶重新輸入文件名等方式重新進行這個操作,也就是說,這是一個可恢復的操作。所以我會在諸如 read()/write()等操作中throw 一個 IOException(checked exception)。?
第二種是設計者認為使用者不能夠處理的異常,比如我寫一個函數要求傳入的參數是個正數,那么當我發現使用者傳了個負數進來時,合理的預期是程序中出bug了。如果我拋出一個異常描述這件事,即使我要求調用者捕獲這個異常,他肯定也不知道該怎么辦(總不能隨便傳一個正數進來吧)。這時候我就會拋出一個IllegalArgumentException(uncheck exception),這里面的潛臺詞是:小子,我知道你也是幫人背黑鍋的,處理不了這個,你還是交給你的領導(調用你的程序)去處理這個異常吧。?
同理,當JVM發現除數為0時,拋出的ArithmeticException也是一個unchecked exception。?

從這里可以看出,checked exception和 unchecked exception的根本區別在于設計者認為使用者是否能夠并且應該處理這個異常。不幸的是,由于Java使用者水平的參差不齊,大量的unchecked exception該被設計成了checked exception,而對于真正的checked exception,又有太多被catch了之后啥都不作就悄無聲息了。尤其是不聲不響吞噬exception的行為,不但達不到設計者本來的要求(進行恢復處理),甚至問題更大(連 unchecked exception那種最后報錯的效果都沒了)。?
所以, C#在異常處理上采用了完全不同的思路,把所有的的exception都設計為 unchecked exception,也就是說,它基于這樣一種思路: 我不要求任何人處理任何異常;如果你能處理,那么你就顯示catch這種異常;如果某種異常沒有人catch,那么系統最終會崩潰。

轉載于:https://www.cnblogs.com/abc8023/p/6216740.html

總結

以上是生活随笔為你收集整理的基础知识《十》unchecked异常和checked异常的全部內容,希望文章能夠幫你解決所遇到的問題。

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