java公司網(wǎng)站怎么做電商網(wǎng)址
異常拋出
當(dāng)Java程序運(yùn)行時(shí)遇到無法處理的情況時(shí),會(huì)拋出一個(gè)異常(比如在一個(gè)方法中如果發(fā)生異常),這時(shí)會(huì)創(chuàng)建一個(gè)異常對(duì)象,并轉(zhuǎn)交給JVM,該異常對(duì)象包含異常名稱,異常描述以及異常發(fā)生時(shí)應(yīng)用程序的狀態(tài)。創(chuàng)建異常對(duì)象并轉(zhuǎn)交給JVM的過程稱為拋出異常。
異常捕捉
當(dāng)JVM檢測(cè)到異常被拋出時(shí),它會(huì)查看當(dāng)前執(zhí)行線程的調(diào)用棧(call stack)。會(huì)順著調(diào)用棧從當(dāng)前方法開始,逐級(jí)向上查找是否有可以處理該異常的代碼塊(catch塊)。JVM使用異常表中的信息來確定哪些catch塊能夠處理這個(gè)異常。它會(huì)從上至下匹配異常處理器,直到找到第一個(gè)能夠處理該異常的catch塊。
異常表
在編譯Java程序時(shí),編譯器會(huì)為每個(gè)方法生成一個(gè)異常表。這個(gè)異常表包含了方法內(nèi)部可能拋出的異常類型以及對(duì)應(yīng)的異常處理器(catch塊)的位置信息。異常表中的每一個(gè)條目都包含了從指針(from pointer)、到指針(to pointer)、目標(biāo)指針(target pointer)以及所捕獲的異常類型。這些指針的值是字節(jié)碼索引(bytecode index, bci),用于定位字節(jié)碼中異常處理器監(jiān)控的范圍。
異常處理
一旦找到可以處理異常的catch塊,JVM會(huì)將異常對(duì)象傳遞給該catch塊,并執(zhí)行其中的異常處理代碼。如果JVM沒有找到可以處理該異常的catch塊,它會(huì)將該異常轉(zhuǎn)交給默認(rèn)的異常處理器(通常是JVM的一部分)。默認(rèn)異常處理器會(huì)打印出異常信息并終止應(yīng)用程序的執(zhí)行。
f