在一個(gè)方法中如果發(fā)生異常,這個(gè)方法會(huì)創(chuàng)建一個(gè)異常對(duì)象,并轉(zhuǎn)交給JVM,該異常對(duì)象包含異常名稱,異常描述以及異常發(fā)生時(shí)應(yīng)用程序的狀態(tài)。
創(chuàng)建異常對(duì)象并轉(zhuǎn)交給JVM的過(guò)程稱為拋出異常??赡苡幸幌盗械姆椒ㄕ{(diào)用,最終才進(jìn)入拋出異常的方法,這一系列方法調(diào)用的有序列表叫做調(diào)用棧。 JVM會(huì)順著調(diào)用棧去查找看是否有可以處理異常的代碼,如果有,則調(diào)用異常處理代碼。當(dāng)JVM發(fā)現(xiàn)可以處理異常的代碼時(shí),會(huì)把發(fā)生的異常傳遞給它。
如果JVM沒有找到可以處理該異常的代碼塊,JVM就會(huì)將該異常轉(zhuǎn)交給默認(rèn)的異常處理器(默認(rèn)處理器為JVM的一部分),默認(rèn)異常處理器打印出異常信息并終止應(yīng)用程序。