1、Java中的異常層次結構簡化示意圖:
說明:上圖只是簡化圖,并不表示Exception只有兩個子類IOException和RuntimeException
2、Java語言規范將派生于RuntimeException類或Error類的所有異常稱為“未檢查(unchecked)”異常,其它檢查稱為“已檢查(checked)異常”
- Error:描述了Java運行時系統的內部錯誤和資源耗盡錯誤,應用程序不應該拋出這種類型的對象。
- RuntimeException : 由于你的程序錯誤(例如錯誤的類型轉換、數組越界訪問)等引起的異常
- 不屬于RuntimeException的異常:曾經能夠正確運行而由于某些情況(例如,I/O錯誤)而導致的異常
3、
If it is a RuntimeException, it was your fault.
4、一個方法必須聲明所有可能拋出的checked 異常,而unchecked異常要么不可控制(Error),要么就應該避免它們的發生(RuntiomException)。如果方法沒有聲明所有可能發生的checked異常,編譯器就會給出一個錯誤信息。除了聲明異常之外也可以捕獲異常。這樣會使異常不被拋到方法之外,也不需要throws規范。
5、如果在子類中覆蓋了超類的一個方法,那么,子類方法中聲明的checked異常不能超過超類方法中聲明的異常范圍,。特別是,如果超類方法沒有拋出任何checked異常,那么子類方法也不能拋出任何checked異常。
6、如果類中的某個方法聲明要拋出的異常是某個類的實例,那么,它既可以拋出一個該類的異常,也可以拋出該類的任意一個子類的異常。
7、try語句可以只有finally字句而沒有catch字句。當拋出的異常必須要有另一個catch語句捕獲。