一、Java的異常處理是通過5個關(guān)鍵字來實(shí)現(xiàn)的:try、catch、 finally、throw、throws
1、捕獲異常:
try:執(zhí)行可能產(chǎn)生的異常代碼
catch:捕獲異常
finally:無論發(fā)生什么異常,代碼都執(zhí)行
2、聲明異常:
throws:聲明方法可能要拋出的各種異常
3、拋出異常:
throw:手動拋出異常
二、常見的異常類型:
Exception???????????????????????????? ? ? ? ? ?????????? 異常父類
ArithmeticException????????????????????????????? 算術(shù)錯誤情形,如以0作為參數(shù)
ArrayIndexOutOfBoundsException????? 數(shù)組下標(biāo)越界
NullPointerException??????????????????????????? 空指針異常
ClassNotFoundException??????????????????? 不能加載的類
IllegalArgumentException??????????????????? 方法接收到非法參數(shù)
ClassCastException???????????????????????????? 對象強(qiáng)制轉(zhuǎn)換類型出錯
NumberFormatException????????????????????? 數(shù)字格式轉(zhuǎn)換異常,如把“abc”換成數(shù)字
三、finally唯一不執(zhí)行的情況
除非在try塊或者catch塊中調(diào)用了退出虛擬機(jī)的方法(即System.exit(1);),否則不管在try塊、catch塊中執(zhí)行怎樣的代碼,出現(xiàn)怎樣的情況,異常處理的finally塊總是會被執(zhí)行的。
當(dāng)程序執(zhí)行try塊,catch塊時遇到return語句或者throw語句,這兩個語句都會導(dǎo)致該方法立即結(jié)束,所以系統(tǒng)并不會立即執(zhí)行這兩個語句,而是
去尋找該異常處理流程中的finally塊,如果沒有finally塊,程序立即執(zhí)行return語句或者throw語句,方法終止。如果有
finally塊,系統(tǒng)立即開始執(zhí)行finally塊,只有當(dāng)finally塊執(zhí)行完成后,系統(tǒng)才會再次跳回來執(zhí)行try塊、catch塊里的
return或throw語句,如果finally塊里也使用了return或throw等導(dǎo)致方法終止的語句,則finally塊已經(jīng)終止了方法,不用再跳回去執(zhí)行try塊、catch塊里的任何代碼了。