checked exception和unchecked exception區別

一、

Java 中定義了兩類異常:

1) Checked exception: 這類異常都是Exception的子類 。異常的向上拋出機制進行處理,如果子類可能產生A異常,那麼在父類中也必須throws A異常。可能導致的問題:代碼效率低,耦合度過高。C#中就沒有使用這種異常機制。

2) Unchecked exception: 這類異常都是RuntimeException的子類,雖然RuntimeException同樣也是Exception的子類,但是它們是特殊的,它們不能通過client code來試圖解決,所以稱爲Unchecked exception 。

另外:

error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。

exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況

二、

checked exception是需要強制catch的異常,你在調用這個方法的時候,你如果不catch這個異常,那麼編譯器就會報錯,比如說我們讀寫文件的時候會catch IOException,執行數據庫操作會有SQLException等
UnChecked Exception是RuntimeException,也就是說運行時的異常,這種異常不是必須需要catch的,你是無法預料的,比如說你在調用一個list.szie()的時候,如果這個list爲null,那麼就會報NUllPointerException,而這個異常就是RuntimeException,也就是UnChecked Exception

三、

Error和RuntimeException及其子類是unchecked exception.其他exception是checked exception.
checked exception可以出現在throws子句中,unchecked exception不可以。
Error是java自己的錯誤或者諸如內存耗盡等嚴重錯誤,是不可抗拒的,顯然沒有捕捉的必要,而且也沒有辦法捕捉。
RuntimeException是你的程序有邏輯錯誤,是程序員應該積極避免其出現的異常。比如NullPointerException等,完全是程序員馬虎出的錯。當遇到這種錯誤時,java將這個錯誤自動捕捉到,比如顯示到concole裏,然後繼續運行。而checked exception如果不捕捉則會導致程序終止。

四、error和excption的區別

Error的繼承關係:

java.lang.Object

--java.lang.Throwable

--java.lang.Error

Exception的繼承關係:

java.lang.Object

--java.lang.Throwable

--java.lang.Exception

 

二者的不同之處:

Exception:

1.可以是可被控制(checked) 或不可控制的(unchecked)

2.表示一個由程序員導致的錯誤

3.應該在應用程序級被處理

Error:

1.總是不可控制的(unchecked)

2.經常用來用於表示系統錯誤或低層資源的錯誤

3.如何可能的話,應該在系統級被捕捉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章