異常
就是在運(yùn)行期間發(fā)生不正常的情況。
在java中類的形式對(duì)不正常的情況進(jìn)行了描述和封裝對(duì)象崭篡,描述不正常情況的類,就稱為異常類吧秕。
異常類和正常流程代碼分離琉闪,提高閱讀性。
其實(shí)異常就是java通過(guò)面向?qū)ο蟮乃枷雽?wèn)題封裝成了對(duì)象砸彬。用異常類對(duì)其進(jìn)行描述颠毙。
不正常情況分為兩類:
一般不可以處理的:Error
可以處理的: Exception
Throwable :無(wú)論是error,還是異常砂碉,問(wèn)題吟秩,問(wèn)題發(fā)生就應(yīng)該可以被拋出,讓調(diào)用者知道并處理绽淘。
可拋型指的是什么涵防?如何體現(xiàn)?
throws沪铭,throw壮池,凡是可被這兩個(gè)關(guān)鍵字操作的類都具有可拋型。
該體系的特點(diǎn):子類的后綴名都是用其父類作為后綴杀怠。閱讀性很好椰憋。
throws 和 throw的區(qū)別
1. throws 用在函數(shù)上,throw使用在函數(shù)內(nèi)赔退。
2. throws 拋出的是異常類橙依,可以拋出多個(gè)证舟,用逗號(hào)隔開。 throw拋出的是異常對(duì)象窗骑。
異常的分類
1.編譯時(shí)被檢測(cè)異常:只要是Exception和其子類都是女责,除了特殊子類RuntimeException體系。這種問(wèn)題一旦出現(xiàn)创译,希望在編譯時(shí)就檢測(cè)抵知,讓這種問(wèn)題有對(duì)應(yīng)的處理方式∪碜澹可以針對(duì)性處理刷喜。
2. 編譯時(shí)不檢查異常,運(yùn)行時(shí)異常:就是Exception中的RuntimeException和其子類立砸,這種問(wèn)題的發(fā)生掖疮,無(wú)法讓功能繼續(xù),運(yùn)算無(wú)法進(jìn)行颗祝。更多的是因?yàn)檎{(diào)用者的原因?qū)е碌幕蛘咭l(fā)了內(nèi)部狀態(tài)改變導(dǎo)致的氮墨。那么這種問(wèn)題一般不出來(lái),直接編譯通過(guò)吐葵,在運(yùn)行時(shí),讓調(diào)用者調(diào)用程序時(shí)的程序強(qiáng)制停止桥氏,讓調(diào)用者自己對(duì)代碼進(jìn)行修正温峭。
異常處理原則
1.函數(shù)內(nèi)容如果拋出需要檢測(cè)的異常,那么函數(shù)上必須聲明字支。否則必須在函數(shù)內(nèi)調(diào)用 try catch進(jìn)行捕捉否則編譯失敗凤藏。
2. 如果調(diào)用到了聲明異常的函數(shù),要么try catch要么throws堕伪,否則編譯失敗揖庄。
3.何時(shí)try catch 何時(shí)throws?
功能內(nèi)容可以解決欠雌,用try catch蹄梢。解決不了用throws告訴調(diào)用者,讓調(diào)用者解決富俄。
4.一個(gè)功能如果拋出了多個(gè)異常禁炒,那么調(diào)用時(shí),必須有對(duì)應(yīng)多個(gè)try catch進(jìn)行針對(duì)性的處理霍比,內(nèi)部有幾個(gè)需要檢測(cè)的異常幕袱,就拋出幾個(gè)異常,拋幾個(gè)catch幾個(gè)悠瞬。
異常的注意事項(xiàng)
1.子類在覆蓋父類方法時(shí)们豌,父類方法如果拋出了異常涯捻,那么子類方法只能拋出父類的異常或者該異常的子類望迎。
2.如果父類拋出多個(gè)異常障癌,那么子類只能拋出父類異常的子集。
子類覆蓋父類只能拋出父類的異忱奚罚或者子類或者子集混弥。
如果父類沒(méi)有拋出異常,那么子類絕對(duì)不可以拋对省,只能try catch蝗拿。
try catch 捕獲異常
異常處理的捕捉形式 這是可以對(duì)異常進(jìn)行針對(duì)性處理的方式
try{
//需要被檢測(cè)異常的代碼
}catch(異常類變量)????//該變量用于接受異常的對(duì)象 {
//處理異常的代碼
}finally{
//一定會(huì)被執(zhí)行的代碼 }
多catch 父類catch放最下面