用 catch 捕獲異常后程序會(huì)繼續(xù)執(zhí)行,如果一個(gè)異常被拋出至到被 catch 程序繼續(xù)執(zhí)行,
或者被拋出 main,printTrace。程序繼續(xù)執(zhí)行的位置是異常被catch的地方。所有初看起來
在catch后的語句和finally里的語句沒什么區(qū)別,在catch后都會(huì)執(zhí)行。這里要強(qiáng)調(diào)的是
finally中的語句是一定會(huì)執(zhí)行的,在下面的幾種情況中finally的語句會(huì)執(zhí)行而catch后的
語句不會(huì)執(zhí)行
1.在catch中又拋出異常
2.try,catch,finally在循環(huán)中,try塊中使用 coninue 或 break
finally是在出現(xiàn)異常后必須要處理的事情,而catch后的語句是認(rèn)為程序已經(jīng)從錯(cuò)誤中恢復(fù),
在正常狀態(tài)下繼續(xù)執(zhí)行。
在一個(gè) try 塊之后可以后多個(gè) catch 塊,每塊捕獲不同的異常。當(dāng)一個(gè)異常被拋出后,安
順序找到匹配的為止
一個(gè)異常可以說明是誰引起了他(cause),可以用構(gòu)造函數(shù)或initCause(Throwable e)
函數(shù)來說明。許多異常沒有帶 Throwable參數(shù)的構(gòu)造函數(shù),但 initCause 一定是可用的
繼承于 RuntimeException 的異常是 unchecked,也就是說編譯器不會(huì)強(qiáng)制程序捕獲或向上
拋出異常,這類異常不強(qiáng)制用戶處理,(當(dāng)然你依然可以捕獲這類異常,只要你愿意)。
這類異常會(huì)一路闖過 main。
復(fù)寫父類的方法時(shí),你只能拋出那些在父類方法中拋出的異常。這樣一來子類方法拋出的異
常只能是父類方法拋出異常的子集。但這個(gè)約束對構(gòu)造函數(shù)是無效的。注意:派生類的構(gòu)造
函數(shù)不能捕獲任何基類拋出的異常