編程錯誤打掘,開發(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類及其子類:程序本身可以處理的異常,這些異常是可以被捕獲及進(jìn)行處理的锹安。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ā)生了異常,而該方法又沒有對異常進(jìn)行處理芽世。則異常 會被該方法的調(diào)用方法來進(jìn)行處理挚赊。一級一級往上傳,JAVA運行系統(tǒng)肯定是會處理的济瓢。
自定義異常類
class OperatorException extends Exception{
一般有個構(gòu)造方法荠割,給異常一些說明;
覆蓋getMessage方法旺矾,把異常說明打印出來涨共;
}
對于自定義異常,它是一個受檢查型異常
聲明異常:在有些情況宠漩,某個方法自身并不需要處理它所生成的異常举反,而是向上傳遞,由調(diào)用它的方法來處理這些異常扒吁,這時就需要在方法聲明出用trows字句來聲明該方法在執(zhí)行過程中可能會產(chǎn)生的異常火鼻,在方法體內(nèi)部,則用throws 語句來具體拋出即可(系統(tǒng)自定義的會自動在方法體拋出)雕崩。
返回類型 方法名(參數(shù))throws 異常類名列表
{
方法體
}