網(wǎng)站建設(shè)智能優(yōu)化seo軟件推廣哪個(gè)好
一、Java中的異常
定義:異常是程序在運(yùn)行過(guò)程中出現(xiàn)的一些錯(cuò)誤,使用面向?qū)ο笏枷氚堰@些錯(cuò)誤用類來(lái)描述,那么一旦產(chǎn)生一個(gè)錯(cuò)誤,即創(chuàng)建某一個(gè)錯(cuò)誤的對(duì)象,這個(gè)對(duì)象就是異常對(duì)象。
類型:
聲明異常:在每個(gè)方法聲明中,使用鍵字throws標(biāo)識(shí)該方法可能拋出的必檢異常的類型稱為聲明異常,如此告知方法的調(diào)用者該方法內(nèi)可能有此類異常。
public void myMethod() throws IOException { ? ? //some code }
拋出異常:當(dāng)檢測(cè)到錯(cuò)誤的程序可以創(chuàng)建一個(gè)合適的異常類型的實(shí)例并拋出它就叫做拋出一個(gè)異常。
IllegalArgumentException ex=new II1egalArgumentException("EX Msg"); throw ex; 或者 throw new IllegalArgumentException("EX Msg");
捕獲異常:當(dāng)拋出一個(gè)異常時(shí),可以在try-catch代碼塊中捕獲和處理。try語(yǔ)句塊中是可能出現(xiàn)問(wèn)題的代碼;catch語(yǔ)句塊中是出現(xiàn)問(wèn)題并捕獲后,處理問(wèn)題的代碼內(nèi)容,如果問(wèn)題在try語(yǔ)句塊中沒(méi)有出現(xiàn)則catch中語(yǔ)句不會(huì)運(yùn)行;finally語(yǔ)句塊中是不管問(wèn)題異常是否產(chǎn)生都要執(zhí)行的代碼內(nèi)容。
try{ ? ?
????????codeA;//業(yè)務(wù)代碼A ? ?
throw new BizException(“郵箱格式錯(cuò)誤!”);//拋出異常 ? ?
codeB;//業(yè)務(wù)代碼B
} catch(Exception e) { ? ?
codeC;//處理異常代碼
} finally { ? ?
codeD;//關(guān)閉資源(IO 數(shù)據(jù)庫(kù) 網(wǎng)絡(luò)),收尾處理的一些工作
}
自定義異常:
二、SpringMVC異常處理
????????編譯時(shí)異常和運(yùn)行時(shí)異常RuntimeException,前者通過(guò)捕獲異常從而獲取異常信息,后者主要通過(guò)規(guī)范代碼開(kāi)發(fā)、測(cè)試通過(guò)手段減少運(yùn)行時(shí)異常的發(fā)生。在開(kāi)發(fā)中,不管是Dao層、Service層還是Controller層,都有可能拋出異常。在SpringMVC中,能將所有類型的異常處理從各處理過(guò)程解耦出來(lái),既保證了相關(guān)處理過(guò)程的功能較單一,也實(shí)現(xiàn)了異常信息的統(tǒng)一處理和維護(hù)。使用一個(gè)友好的頁(yè)面顯示,而不是一堆看不懂的錯(cuò)誤信息。
全局統(tǒng)一異常實(shí)現(xiàn)方式
自帶的SimpleMappingExceptionResolver
實(shí)現(xiàn)HandlerExceptionResolver接口
@ControllerAdvice + @ExceptionHandler注解
1、方式一:默認(rèn)異常處理器
2、方式二:實(shí)現(xiàn)HandlerExceptionResolver接口
(1)創(chuàng)建異常處理器:在工程中創(chuàng)建GlobalExceptionResolver異常處理器類,捕獲異常后頁(yè)面跳轉(zhuǎn)到error頁(yè)面。
(2)注冊(cè)異常處理器Bean:在spring-mvc.xml中,注冊(cè)定義的GlobalExceptionResolver處理器。
或者在自定義異常處理類上添加@Component注解
(3)自定義異常類:創(chuàng)建自定義BizException異常類,業(yè)務(wù)代碼統(tǒng)一使用自定義異常BizException拋出錯(cuò)誤信息。
(4)定義業(yè)務(wù)處理器方法:在Controller中,定義獲取圖書(shū)信息方法,并返回結(jié)果。如果圖書(shū)ID傳入大于100時(shí),拋出數(shù)據(jù)獲取異常信息。
(5)創(chuàng)建異常顯示視圖:使用error.jsp頁(yè)面統(tǒng)一顯示系統(tǒng)中出現(xiàn)的異常信息。
3、方式三:@ControllerAdvice+@ExceptionHandler
(1)創(chuàng)建異常處理器:創(chuàng)建GlobalExceptionHandler異常處理器類,根據(jù)捕獲的不同異常,并返回相應(yīng)的異常信息。
(2)定義業(yè)務(wù)處理器方法:在Controller中,定義獲取圖書(shū)信息方法,并返回結(jié)果。如果圖書(shū)ID傳入大于100時(shí),拋出數(shù)據(jù)獲取異常信息。
????????全局異常處理只能捕獲Controller層未捕獲(或往外拋)的異常,對(duì)于 Interceptor層的異常,或Spring框架層的異常,就無(wú)能為力了。