一、Java的異常處理是通過(guò)5個(gè)關(guān)鍵字來(lái)實(shí)現(xiàn)的:try舞吭、catch泡垃、 finally析珊、throw、throws
1蔑穴、捕獲異常:
try:執(zhí)行可能產(chǎn)生的異常代碼
catch:捕獲異常
finally:無(wú)論發(fā)生什么異常忠寻,代碼都執(zhí)行
2、聲明異常:
throws:聲明方法可能要拋出的各種異常
3存和、拋出異常:
throw:手動(dòng)拋出異常
二奕剃、常見(jiàn)的異常類(lèi)型:
Exception???????????????????????????? ? ? ? ? ?????????? 異常父類(lèi)
ArithmeticException????????????????????????????? 算術(shù)錯(cuò)誤情形,如以0作為參數(shù)
ArrayIndexOutOfBoundsException????? 數(shù)組下標(biāo)越界
NullPointerException??????????????????????????? 空指針異常
ClassNotFoundException??????????????????? 不能加載的類(lèi)
IllegalArgumentException??????????????????? 方法接收到非法參數(shù)
ClassCastException???????????????????????????? 對(duì)象強(qiáng)制轉(zhuǎn)換類(lèi)型出錯(cuò)
NumberFormatException????????????????????? 數(shù)字格式轉(zhuǎn)換異常捐腿,如把“abc”換成數(shù)字
三纵朋、finally唯一不執(zhí)行的情況
除非在try塊或者catch塊中調(diào)用了退出虛擬機(jī)的方法(即System.exit(1);),否則不管在try塊茄袖、catch塊中執(zhí)行怎樣的代碼操软,出現(xiàn)怎樣的情況,異常處理的finally塊總是會(huì)被執(zhí)行的宪祥。
當(dāng)程序執(zhí)行try塊聂薪,catch塊時(shí)遇到return語(yǔ)句或者throw語(yǔ)句,這兩個(gè)語(yǔ)句都會(huì)導(dǎo)致該方法立即結(jié)束品山,所以系統(tǒng)并不會(huì)立即執(zhí)行這兩個(gè)語(yǔ)句,而是
去尋找該異常處理流程中的finally塊烤低,如果沒(méi)有finally塊肘交,程序立即執(zhí)行return語(yǔ)句或者throw語(yǔ)句,方法終止扑馁。如果有
finally塊涯呻,系統(tǒng)立即開(kāi)始執(zhí)行finally塊,只有當(dāng)finally塊執(zhí)行完成后腻要,系統(tǒng)才會(huì)再次跳回來(lái)執(zhí)行try塊复罐、catch塊里的
return或throw語(yǔ)句,如果finally塊里也使用了return或throw等導(dǎo)致方法終止的語(yǔ)句雄家,則finally塊已經(jīng)終止了方法效诅,不用再跳回去執(zhí)行try塊、catch塊里的任何代碼了趟济。