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