Error、Exception與RuntimeException的區別


  Error與Exception都繼承自Throwable,而RuntimeException則繼承自Exception。在Java中只有Throwable類型的實例才可以被拋出(throw)或捕獲(catch)。

 

 

 

  Error和Exception體現了Java平台設計者對不同異常情況的分類。Exception是程序正常運行中可以預料的意外情況,可能並且應該被捕獲,進行相應處理。Error則是指在正常情況下,不大可能出現的情況,絕大部分的Error都會導致程序(比如JVM)處於非正常的、不可恢復狀態。既然是非正常情況,所以不便於也不需要捕獲,常見的比如OutOfMemoryError,其為Error的子類。

  有個經典的題目:NoClassDefFoundError和ClassNotFoundException有什么區別?正確答案:NoClassDefFoundError是當Java虛擬機或ClassLoader實例試圖加載某個類,但無法找到該類的定義時拋出此異常;ClassNotFoundException是當應用程序試圖調用Class.forName(String)通過字符串名加載類,而找不到該類定義時拋出的異常。

  Exception又分為檢查型異常和非檢查型異常。所有RuntimeException的子類即為非檢查型異常;Exception的其余子類都為檢查型異常。所謂“檢查型異常”是指在源代碼例必須顯式地進行捕獲處理,這是編譯期檢查的一部分。也就是說,當你看到某個方法聲明中可能拋出某個檢查型異常,那么作為調用方必須考慮如何處理這個異常,否則編譯器就是給出錯誤提示。

  所謂“非檢查型異常”,通常是可以通過編碼加以避免的邏輯錯誤,具體根據需要來判斷是否需要捕獲,並不會在編譯期強制要求。例如NullPointerException、ArrayIndexOutOfBoundsException等。也就是說,程序員應該通過合理編碼來努力避免程序出現這類異常,或者說程序出現這類異常就是程序員的責任。

 

摘自:https://blog.csdn.net/qweqwruio/article/details/81329178

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM