異常(中).png
異常類體系
image.png
Throwable
- Error
Error表示系統(tǒng)錯誤或資源耗盡,由Java系統(tǒng)自己使用,應(yīng)用程序不應(yīng)拋出和處理, 比如圖中列出的虛擬機錯誤(VirtualMacheError)及其子類內(nèi)存溢出錯誤(OutOfMemoryError)和棧溢出錯誤(StackOverflowError)。 - Exception
Exception表示應(yīng)用程序錯誤,它有很多子類迄靠,應(yīng)用程序也可以通過繼承Exception或其子類創(chuàng)建自定義異常, 圖中列出了三個直接子類:IOException(輸入輸出I/O異常)斋否,SQLException(數(shù)據(jù)庫SQL異常)梨水,RuntimeException(運行時異常) -
RuntimeException
RuntimeException(運行時異常)比較特殊,它的名字有點誤導(dǎo)茵臭,因為其他異常也是運行時產(chǎn)生的疫诽,它表示的實際含義是unchecked exception (未受檢異常),相對而言旦委,Exception的其他子類和Exception自身則是checked exception (受檢異常)奇徒,Error及其子類也是unchecked exception。
checked還是unchecked缨硝,區(qū)別在于Java如何處理這兩種異常摩钙,對于checked異常, Java會強制要求程序員進(jìn)行處理查辩,否則會有編譯錯誤胖笛,而對于unchecked異常則沒有這個要求
image.png
這么多不同的異常類其實并沒有比Throwable這個基類多多少屬性和方法网持, 大部分類在繼承父類后只是定義了幾個構(gòu)造方法,這些構(gòu)造方法也只是調(diào)用了父類的構(gòu)造方法长踊,并沒有額外的操作
使用合適的名字都有助于代碼的可讀性和可維護(hù)性功舀。
自定義異常
public class AppException extends Exception {
public AppException() {
super();
}
public AppException(String message,
Throwable cause) {
super(message, cause);
}
public AppException(String message) {
super(message);
}
public AppException(Throwable cause) {
super(cause);
}
}
一般通過繼承Exception或者它的某個子類,如果父類是RuntimeException或它的某個子類身弊,則自定義異常也是unchecked exception辟汰,如果是Exception或Exception的其他子類,則自定義異常是checked exception阱佛。
和很多其他異常類一樣帖汞,我們沒有定義額外的屬性和代碼,只是繼承了Exception凑术,定義了構(gòu)造方法并調(diào)用了父類的構(gòu)造方法翩蘸。