編程錯誤,開發(fā)人員考慮不周、用戶操作不當(dāng)、外部運行環(huán)境出故障都可能出現(xiàn)這樣那樣的錯誤,為了程序的健壯性,我們就有必要使用異常。
JAVA標(biāo)準(zhǔn)類庫中預(yù)定義了很多異常類,每個類都代表了一種運行錯誤,每當(dāng)程序在運行過程中發(fā)生了一個有相對應(yīng)異常類的運行錯誤時,系統(tǒng)就會自動拋出一個該異常類的對象。
所有異常類的祖先都是java.lang.Throwable。只有當(dāng)對象是此類(或此類的子類)的實例時,才可以被拋出。這個祖先提供和了訪問異常信息的一些方法,常用的方法包括:
public String getMessage();
printStackTrace();
Throwable有兩個直接子類:Erroe類和Exception類。Error和Exception類又有很多子類。
Error類及其子類:用于靠程序自身無法恢復(fù)的一些嚴(yán)重錯誤。這種錯誤只能讓其終止。這種類無法catch
Exception類及其子類:程序本身可以處理的異常,這些異常是可以被捕獲及進行處理的。Exception的類的子類從編程的角度可分為不受檢查型異常和受檢查性異常。
RuntimException類及其子類均為不受檢查型異常,當(dāng)程序中可能出現(xiàn)這類異常時,即使在程序中沒有try-catch語句捕獲及處理異常,或者沒有用throws字據(jù)聲明異常,程序也能編譯通過。
Exception的子類中除了RuntimeException及其子類外其他的類都屬于受檢查型異常。這種異常的特點是JAVA編譯器會檢查它。當(dāng)程序中可能出現(xiàn)這類異常(特別是系統(tǒng)規(guī)定的異常類)時,要么用try-catch語句捕獲它,要么用throws字句聲明它,否則會出現(xiàn)編譯錯誤。
一般一些RuntimeException在程序中,你不顯示的注意它,出現(xiàn)了這種異常,JAVA運行系統(tǒng)他會自動檔處理(可能是里面的某個層次較深的方法傳上來的),處理結(jié)果是提示所發(fā)生的異常類型,并指明導(dǎo)致異常產(chǎn)生的代碼的行數(shù)。
try-catch-finally
try不能單使用。catch和finally可以不同時出現(xiàn),單獨catch ,finally都可以。catch可以有多個(多個一般是越到下面。范圍越大),finally是一定被執(zhí)行的。
如果在一個方法中發(fā)生了異常,而該方法又沒有對異常進行處理。則異常 會被該方法的調(diào)用方法來進行處理。一級一級往上傳,JAVA運行系統(tǒng)肯定是會處理的。
自定義異常類
class OperatorException extends Exception{
一般有個構(gòu)造方法,給異常一些說明;
覆蓋getMessage方法,把異常說明打印出來;
}
對于自定義異常,它是一個受檢查型異常
聲明異常:在有些情況,某個方法自身并不需要處理它所生成的異常,而是向上傳遞,由調(diào)用它的方法來處理這些異常,這時就需要在方法聲明出用trows字句來聲明該方法在執(zhí)行過程中可能會產(chǎn)生的異常,在方法體內(nèi)部,則用throws 語句來具體拋出即可(系統(tǒng)自定義的會自動在方法體拋出)。
返回類型 方法名(參數(shù))throws 異常類名列表
{
方法體
}