十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
本篇內(nèi)容介紹了“Java異常體系知識(shí)點(diǎn)有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括平城網(wǎng)站建設(shè)、平城網(wǎng)站制作、平城網(wǎng)頁(yè)制作以及平城網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,平城網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到平城省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
優(yōu)秀的程序代碼,都在追求高效,安全,和低錯(cuò)誤率,但是程序中的異常是無(wú)法避免的,降低異常出現(xiàn)的頻率是關(guān)鍵,異常出現(xiàn)如何處理是另一個(gè)重要方面,Java體系中異??蚣軐?duì)于系統(tǒng)開(kāi)發(fā)是十分重要的。
面對(duì)系統(tǒng)異常時(shí),不要慌亂,異常雖然是錯(cuò)誤,也是系統(tǒng)發(fā)出的消息,標(biāo)識(shí)系統(tǒng)的缺陷和需要改進(jìn)的地方。
Java的API中已經(jīng)定義許多異常類,分為兩大類,錯(cuò)誤Error和異常Exception,Throwable作為所有異常的超類,如圖:
Error:一般為底層的不可恢復(fù)的類,一般此類錯(cuò)誤都比較嚴(yán)重,JVM將終止其運(yùn)行的線程;
VirtualMachineError:虛擬機(jī)運(yùn)行錯(cuò)誤;
OutOfMemoryError:內(nèi)存溢出;
Exception:程序本身可以捕獲并且可以預(yù)處理的異常,例如捕獲或者拋出;
RuntimeException:運(yùn)行時(shí)異常;
CheckException:已檢查異常,編譯階段必須處理;
幾個(gè)經(jīng)典的常見(jiàn)的RunTimeException如下:空指針NullPointerException;數(shù)組下標(biāo)越界ArrayIndexoutofBoundsException等。
Java異常處理關(guān)鍵字,分別是:try、catch、finally、throw、throws。
應(yīng)該在合適的位置處理異常,異常的處理準(zhǔn)則如下:誰(shuí)知情誰(shuí)處理,誰(shuí)負(fù)責(zé)誰(shuí)處理,誰(shuí)導(dǎo)致誰(shuí)處理。
即異常在當(dāng)前流程下不處理,一種是直接通過(guò)方法傳遞給調(diào)用者,throws關(guān)鍵字是用于在方法聲明上聲明拋出異常類型的,并且一次可以聲明拋出多種類型的異常。throw關(guān)鍵字是用于方法的內(nèi)部拋出一個(gè)異常對(duì)象,常在業(yè)務(wù)校驗(yàn)時(shí)拋出提示。
需要特別說(shuō)明的一點(diǎn),在Spring框架中,事務(wù)觸發(fā)多數(shù)是以是否拋出異常為標(biāo)識(shí)來(lái)處理的,如果方法在事務(wù)控制內(nèi),方法內(nèi)異常捕獲但是最終沒(méi)有拋出,那該事務(wù)則無(wú)效。
通常捕獲異常會(huì)使用try-catch-finally關(guān)鍵字三連操作:
Try嘗試捕獲異常:
如果語(yǔ)句依次執(zhí)行結(jié)束,則跳過(guò)catch,在存在finally代碼塊時(shí),則執(zhí)行否則執(zhí)行后續(xù)流程;
如果捕獲異常,則匹配catch中的類型,如果沒(méi)有與之匹配的catch類型,則該異常交給JVM處理,finally代碼會(huì)被執(zhí)行,流程之后的代碼不會(huì)被執(zhí)行;
如果捕獲異常且存在相匹配的catch類型,則跳到catch代碼塊執(zhí)行,finally代碼會(huì)被執(zhí)行,執(zhí)行完finally代碼塊之后繼續(xù)執(zhí)行后續(xù)代碼;
Catch匹配可能出現(xiàn)的異常類型,并在其中做補(bǔ)償處理,例如出現(xiàn)異常情況,需要更新一個(gè)異常狀態(tài)等,如果沒(méi)有catch塊,后必須跟finally塊,處理資源釋放;
Finally無(wú)論是否捕獲異常,finally代碼會(huì)被執(zhí)行,也是面試中常見(jiàn)的異常問(wèn)題之一,例如在finally代碼塊return,或者修改返回值等,主要涉及到值傳遞和引用傳遞方面。
復(fù)雜的業(yè)務(wù)系統(tǒng)必備功能,異常日志體系,用來(lái)分析運(yùn)行問(wèn)題,作為系統(tǒng)不斷優(yōu)化的核心依據(jù),通常會(huì)記錄如下幾塊:
異常類型:分析異常發(fā)生的關(guān)鍵原因;
異常信息:通常會(huì)簡(jiǎn)單記錄e.getMsg輸出的內(nèi)容;
異常位置:快速定位異常發(fā)生的位置[類.方法];
業(yè)務(wù)參數(shù):特定業(yè)務(wù)參數(shù)場(chǎng)景才能復(fù)現(xiàn)的問(wèn)題;
時(shí)間節(jié)點(diǎn):有的并發(fā)問(wèn)題是在特定時(shí)間段出現(xiàn);
異常日志記錄下來(lái)之后,還會(huì)定期進(jìn)行任務(wù)分析,不斷發(fā)現(xiàn)系統(tǒng)容易出問(wèn)題的地方,然后再不斷的改進(jìn)和優(yōu)化。
在微服務(wù)架構(gòu)系統(tǒng)下,某個(gè)服務(wù)故障或者異常,觸發(fā)熔斷該服務(wù),避免引發(fā)整個(gè)微服務(wù)鏈路異常,防止整個(gè)系統(tǒng)服務(wù)的雪崩。以此緩解服務(wù)器資源的的壓力,以保證核心業(yè)務(wù)的正常運(yùn)行。
“Java異常體系知識(shí)點(diǎn)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!