首先還是借用一張圖來說明一下:
?Java中運(yùn)行時(shí)產(chǎn)生的邏輯錯(cuò)誤分為兩類:可捕獲的異常和不可捕獲的錯(cuò)誤。
Error (錯(cuò)誤) : 是程序無法處理的,表示運(yùn)行應(yīng)用程序中較嚴(yán)重問題。這些錯(cuò)誤表示故障發(fā)生于虛擬機(jī)自身、或者發(fā)生在虛擬機(jī)試圖執(zhí)行應(yīng)用時(shí),如Java虛擬機(jī)運(yùn)行錯(cuò)誤(Virtual MachineError)、類定義錯(cuò)誤(NoClassDefFoundError)等。
Exception (異常) : 是程序本身可以處理的異常。
運(yùn)行時(shí)異常: 都是RuntimeException類及其子類異常,如NullPointerException(空指針異常)、IndexOutOfBoundsException(下標(biāo)越界異常)等,這些異常是不檢查異常,程序中可以選擇捕獲處理,也可以不處理。這些異常一般是由程序邏輯錯(cuò)誤引起的,程序應(yīng)該從邏輯角度盡可能避免這類異常的發(fā)生。
非運(yùn)行時(shí)異常 ? (編譯異常): 從程序語法角度講是必須進(jìn)行處理的異常,如果不處理,程序就不能編譯通過。如IOException、SQLException等以及用戶自定義的Exception異常,一般情況下不自定義檢查異常。
???在 Java 應(yīng)用程序中,異常處理機(jī)制為:拋出異常,捕捉異常。
? ? ? ? 拋出異常 :當(dāng)一個(gè)方法出現(xiàn)錯(cuò)誤引發(fā)異常時(shí),方法創(chuàng)建異常對象并交付運(yùn)行時(shí)系統(tǒng),異常對象中包含了異常類型和異常出現(xiàn)時(shí)的程序狀態(tài)等異常信息。運(yùn)行時(shí)系統(tǒng)負(fù)責(zé)尋找處置異常的代碼并執(zhí)行。
? ? ? ? ? 捕獲異常 :對于所有的可查異常,Java規(guī)定:一個(gè)方法必須捕捉,或者聲明拋出方法之外。也就是說,當(dāng)一個(gè)方法選擇不捕捉可查異常時(shí),它必須聲明將拋出異常。
try-catch 語句
? ? ?在Java中,異常通過try-catch語句捕獲。其一般語法形式為
try?{??
????//? 可能會發(fā)生異常的程序代碼 ??
}?catch?(Type1?id1){??
????//? 捕獲并處置 try 拋出的異常類型 Type1??
}??
catch?(Type2?id2){??
?????// 捕獲并處置 try 拋出的異常類型 Type2?
?
} ?
? ? ???關(guān)鍵詞try后的一對大括號將一塊可能發(fā)生異常的代碼包起來,稱為監(jiān)控區(qū)域。Java方法在運(yùn)行過程中出現(xiàn)異常,則創(chuàng)建異常對象。將異常拋出監(jiān)控區(qū)域之 外,由Java運(yùn)行時(shí)系統(tǒng)試圖尋找匹配的catch子句以捕獲異常。若有匹配的catch子句,則運(yùn)行其異常處理代碼,try-catch語句結(jié)束。
? ? ? ?匹配的原則是:如果拋出的異常對象屬于catch子句的異常類,或者屬于該異常類的子類,則認(rèn)為生成的異常對象與catch塊捕獲的異常類型相匹配。
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
