Error和Exception的理解與區(qū)別

java開發(fā)過程中,我們很難保證程序每次都能正常運行,當程序運行出錯時是一種很槽糕的開發(fā)體驗。我們通常希望代碼崩潰后能恢復到一種穩(wěn)定的狀態(tài)或者給出人性化的提示,指出具體的錯誤。因此,java提供了異常處理機制,給開發(fā)者反饋出錯誤的原因。
異常處理可以保證出現(xiàn)錯誤后,控制接下來的程序流程,是選擇定位錯誤信息,還是拋出異?;虿东@異常、還是避免程序非正常退出,都取決于程序開發(fā)者。

根據(jù)異常的不同可以大致分為Error和Exception兩類,他們都繼承于Throwable 類


image.png

其中Error是虛擬機生成并拋出的,Error發(fā)生通常表示發(fā)生了嚴重的問題,超出了程序員可處理的范圍。比如:
1、Java虛擬機運行錯誤(VirtualMachineError)
2、內(nèi)存耗盡錯誤 (OutOfMemoryError)
3、類定義錯誤(NoClassDefFoundError)
4、鏈接錯誤(LinkageError)
這些異常發(fā)生時,Java虛擬機(JVM)一般會選擇線程終止。
而Exception通常是程序自身導致的異常,是可預料到的異常。這些異常又可以分為CheckedException和UnCheckedException兩種。
1、CheckedException:(編譯時異常) 需要用try——catch顯示的捕獲,對于可恢復的異常使用CheckedException。
2、UnCheckedException(RuntimeException):(運行時異常)不需要捕獲,對于程序錯誤(不可恢復)的異常使用RuntimeException。
這樣劃分的原因也很簡單,因為有一些異常是程序員自身開發(fā)導致的,比如空指針異常和數(shù)據(jù)越界異常。這些異常本不應該發(fā)生,可以通過編碼來避免的,所以java開發(fā)時不會強制要求捕獲。
另一種異常是不在程序員開發(fā)可控的,有可能會出現(xiàn),所以必須要捕獲。比如:往文件中寫入數(shù)據(jù)時文件不存在,發(fā)生IO異常;操作數(shù)據(jù)庫時發(fā)生SQL異常,這些都是有可能出現(xiàn)意外的地方,java無法給出保證,所以強制要捕獲。

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容