java Exception:
1亿眠、Error
2碎罚、Runtime Exception 運(yùn)行時(shí)異常
3、Exception
4纳像、throw 用戶自定義拋出的異常
異常分為兩大類型:
● Error類:代表了編譯和系統(tǒng)的錯(cuò)誤荆烈,不允許捕獲,比如虛擬機(jī)錯(cuò)誤竟趾,內(nèi)存空間不足憔购,方法調(diào)用棧溢出等,如java.lang.StackOverFlowError和Java.lang.OutOfMemoryError等岔帽,對(duì)于這類錯(cuò)誤玫鸟,java編譯器不去檢查,僅靠程序本身也無法恢復(fù)和預(yù)防犀勒,建議終止程序
● Exception類:表示程序可以處理的異常屎飘,可以捕獲且有可能恢復(fù),對(duì)于這類異常账蓉,應(yīng)盡可能處理異常枚碗,是程序恢復(fù)運(yùn)行逾一。此類又可分為運(yùn)行時(shí)異常Runtime_Exception和非運(yùn)行時(shí)異常Non_RuntimeException兩個(gè)直接子類铸本。
⊙+ 運(yùn)行時(shí)異常:對(duì)應(yīng)于編譯錯(cuò)誤,是指java程序在運(yùn)行時(shí)產(chǎn)生的由解釋器引發(fā)的各種異常遵堵。比較常見的此類異常:除數(shù)為0時(shí)的算術(shù)異常ArithmeticException箱玷、錯(cuò)誤的類型轉(zhuǎn)換、數(shù)組下標(biāo)越界ArrayIndexOutOfBoundsException陌宿、空指針異常NullPointerException
⊙ +非運(yùn)行時(shí)異常:又稱可檢測(cè)異常锡足,此類異常可使用throws和try-catch-finally來處理壳坪。比較常見:SQLException舶得、IOException等
二、異常處理流程
1爽蝴、 如果程序之中產(chǎn)生了異常沐批,那么會(huì)自動(dòng)的由JVM根據(jù)異常的類型纫骑,實(shí)例化一個(gè)指定異常類的對(duì)象;
2九孩、 如果這個(gè)時(shí)候程序之中沒有任何的異常處理操作先馆,則這個(gè)異常類的實(shí)例化對(duì)象將交給JVM進(jìn)行處理,而JVM的默認(rèn)處理方式就是進(jìn)行異常信息的輸出躺彬,而后中斷程序執(zhí)行煤墙;
3、 如果程序之中存在了異常處理宪拥,則會(huì)由try語(yǔ)句捕獲產(chǎn)生的異常類對(duì)象仿野;
4、 與try之后的每一個(gè)catch進(jìn)行匹配她君,如果匹配成功设预,則使用指定的catch進(jìn)行處理,如果沒有匹配成功犁河,則向后面的catch繼續(xù)匹配鳖枕,如果沒有任何的catch匹配成功,則這個(gè)時(shí)候?qū)⒔唤oJVM執(zhí)行默認(rèn)處理桨螺;
5宾符、 不管是否有異常都會(huì)執(zhí)行finally程序,如果此時(shí)沒有異常灭翔,執(zhí)行完finally魏烫,則會(huì)繼續(xù)執(zhí)行程序之中的其他代碼,如果此時(shí)有異常沒有能夠處理(沒有一個(gè)catch可以滿足)肝箱,那么也會(huì)執(zhí)行finally哄褒,但是執(zhí)行完finally之后,將默認(rèn)交給JVM進(jìn)行異常的信息輸出煌张,并且程序中斷呐赡;
三、一些需要注意的地方
●在catch塊中骏融,由上至下的異常范圍越來越大
try語(yǔ)句在返回前链嘀,將其他所有的操作執(zhí)行完,保留好要返回的值档玻,而后轉(zhuǎn)入執(zhí)行finally中的語(yǔ)句怀泊,而后分為以下三種情況:
情況一:如果finally中有return語(yǔ)句,則會(huì)將try中的return語(yǔ)句<font color=blue>”覆蓋“</font>掉误趴,直接執(zhí)行finally中的return語(yǔ)句霹琼,得到返回值,這樣便無法得到try之前保留好的返回值。
情況二:如果finally中沒有return語(yǔ)句枣申,也沒有改變要返回值树灶,則執(zhí)行完finally中的語(yǔ)句后,會(huì)接著執(zhí)行try中的return語(yǔ)句糯而,返回之前保留的值天通。
情況三:如果finally中沒有return語(yǔ)句,但是改變了要返回的值熄驼,這里有點(diǎn)類似與引用傳遞和值傳遞的區(qū)別像寒,分以下兩種情況,:
1)如果return的數(shù)據(jù)是基本數(shù)據(jù)類型或文本字符串瓜贾,則在finally中對(duì)該基本數(shù)據(jù)的改變不起作用诺祸,try中的return語(yǔ)句依然會(huì)返回進(jìn)入finally塊之前保留的值。
2)如果return的數(shù)據(jù)是引用數(shù)據(jù)類型祭芦,而在finally中對(duì)該引用數(shù)據(jù)類型的屬性值的改變起作用筷笨,try中的return語(yǔ)句返回的就是在finally中改變后的該屬性的值。
四龟劲、throw關(guān)鍵字
public class TestDemo {
public static void main(String args[]){
try {
throw new Exception("拋著玩的胃夏,你管不著。") ;
} catch (Exception e) {
e.printStackTrace() ;
}
}
}