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