[面試經]Java中的Exception和Error有什麼區別?

Exception和Error都是繼承了Throwable類,在Java中只有Throwable類型的實例才能夠被拋出(throw)或者捕獲(catch),他是異常處理機制的基本組成類型。編碼

Exception是程序正常容許中,能夠預料的意外狀況,可能而且能夠捕獲,進行相應處理。設計

Exception又分爲可檢查(checked)異常和不檢查(unchecked)異常,可檢查異常在源代碼裏必須顯式地進行捕獲處理,這是編譯期檢查的一部分。不檢查異常就是所謂的運行時異常,相似NullPointerException、ArrayIndexOutOfBoundsException之類,一般是能夠編碼避免的邏輯錯誤,具體根據須要判斷是否須要捕獲,並不會在編譯器強制要求。日誌

Error是指在正常狀況下,不大可能出現的狀況,絕大部分的Error都會致使程序處於非正常的不可恢復的狀態。既然是非正常狀況,因此也不便於也不須要捕獲,常見的好比OutOfMemoryError,都是Error的子類。blog

考察重點 繼承

1) 理解Throwable、Exception、Error的設計很分類,好比掌握那些應用最爲普遍的子類,以及如何自定義異常等。接口

2) 理解Java語言中操做Throwable的元素和實踐,掌握最基本的語法是必須的,好比try-catch-finally塊,throw、throws關鍵字等。資源

Java 7中try with resource,若是資源屬於一個實現了AutoCloseable接口的類,try塊結束時,會自動調用res.close(). 就好像是使用了finally塊同樣。編譯器

異常處理的基本原則:a. 儘可能不要捕獲相似Exception這樣的通用異常,而是應該捕獲特定異常。 b. 不要生吞異常。c. 也不要常用printStackTrace(),在複雜的系統裏,很難判斷到底輸出到哪裏去了。因此最好使用產品日誌,詳細地輸出到日誌系統裏面。產品

 

另附常見異常it

常見運行時異常:

 

常見非運行時異常:
 

 

相關文章
相關標籤/搜索