
1.當(dāng)程序在運(yùn)行的過程中出現(xiàn)了異常,會(huì)由JVM自動(dòng)根據(jù)異常的類型實(shí)例化一個(gè)與之類型匹配的異常類。
2.產(chǎn)生異常對(duì)象后會(huì)判斷當(dāng)前的語句是否存在異常處理,如果現(xiàn)在沒有異常處理,就交給JVM進(jìn)行默認(rèn)的異常處理,處理方式:輸出異常信息,而后結(jié)束程序的調(diào)用。
3.如果此時(shí)存在異常的捕獲操作,那么會(huì)先有try語句來捕獲產(chǎn)生的異常類實(shí)例化對(duì)象,再與try'語句的每一個(gè)catch進(jìn)行對(duì)比,如果有符合的捕獲類型,則使用當(dāng)前catch的語句來進(jìn)行異常的處理,如果不匹配,則往下繼續(xù)匹配其他catch。
4.不管最后異常處理是否能夠匹配,都要向后執(zhí)行,如果此時(shí)程序中存在finally語句,就先執(zhí)行finally中的代碼。執(zhí)行完finally語句后需要根據(jù)之前的catch匹配結(jié)果來決定如何執(zhí)行,如果之前已經(jīng)成功捕獲異常,就集繼續(xù)執(zhí)行finally之后的代碼,如果之前沒有成功的捕獲異常,九江此異常交給JVM進(jìn)行默認(rèn)處理。
整個(gè)過程就像方法傳遞參數(shù)一樣,只是根據(jù)catch后面的參數(shù)類型進(jìn)行匹配。既然對(duì)象捕獲只是一個(gè)異常類對(duì)象的傳遞過程,那么根據(jù)java中對(duì)象自動(dòng)向上轉(zhuǎn)型,所以異常類對(duì)象都可以向父類對(duì)象轉(zhuǎn)型,也證明了所有異常類對(duì)象都可以使用Exception來接收。
為什么不選擇Throwable?
如果該異常只有Exception類型,如果使用Throwable接受,還會(huì)表示可以處理Error的錯(cuò)誤,二用戶是處理不了Error錯(cuò)誤的(jvm處理),所以開發(fā)中用戶可以處理的異常都要求以Exception為主。