您好,登錄后才能下訂單哦!
本篇內容介紹了“Java異常體系知識點有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
優秀的程序代碼,都在追求高效,安全,和低錯誤率,但是程序中的異常是無法避免的,降低異常出現的頻率是關鍵,異常出現如何處理是另一個重要方面,Java體系中異常框架對于系統開發是十分重要的。
面對系統異常時,不要慌亂,異常雖然是錯誤,也是系統發出的消息,標識系統的缺陷和需要改進的地方。
Java的API中已經定義許多異常類,分為兩大類,錯誤Error和異常Exception,Throwable作為所有異常的超類,如圖:
Error:一般為底層的不可恢復的類,一般此類錯誤都比較嚴重,JVM將終止其運行的線程;
VirtualMachineError:虛擬機運行錯誤;
OutOfMemoryError:內存溢出;
Exception:程序本身可以捕獲并且可以預處理的異常,例如捕獲或者拋出;
RuntimeException:運行時異常;
CheckException:已檢查異常,編譯階段必須處理;
幾個經典的常見的RunTimeException如下:空指針NullPointerException;數組下標越界ArrayIndexoutofBoundsException等。
Java異常處理關鍵字,分別是:try、catch、finally、throw、throws。
應該在合適的位置處理異常,異常的處理準則如下:誰知情誰處理,誰負責誰處理,誰導致誰處理。
即異常在當前流程下不處理,一種是直接通過方法傳遞給調用者,throws關鍵字是用于在方法聲明上聲明拋出異常類型的,并且一次可以聲明拋出多種類型的異常。throw關鍵字是用于方法的內部拋出一個異常對象,常在業務校驗時拋出提示。
需要特別說明的一點,在Spring框架中,事務觸發多數是以是否拋出異常為標識來處理的,如果方法在事務控制內,方法內異常捕獲但是最終沒有拋出,那該事務則無效。
通常捕獲異常會使用try-catch-finally關鍵字三連操作:
Try嘗試捕獲異常:
如果語句依次執行結束,則跳過catch,在存在finally代碼塊時,則執行否則執行后續流程;
如果捕獲異常,則匹配catch中的類型,如果沒有與之匹配的catch類型,則該異常交給JVM處理,finally代碼會被執行,流程之后的代碼不會被執行;
如果捕獲異常且存在相匹配的catch類型,則跳到catch代碼塊執行,finally代碼會被執行,執行完finally代碼塊之后繼續執行后續代碼;
Catch匹配可能出現的異常類型,并在其中做補償處理,例如出現異常情況,需要更新一個異常狀態等,如果沒有catch塊,后必須跟finally塊,處理資源釋放;
Finally無論是否捕獲異常,finally代碼會被執行,也是面試中常見的異常問題之一,例如在finally代碼塊return,或者修改返回值等,主要涉及到值傳遞和引用傳遞方面。
復雜的業務系統必備功能,異常日志體系,用來分析運行問題,作為系統不斷優化的核心依據,通常會記錄如下幾塊:
異常類型:分析異常發生的關鍵原因;
異常信息:通常會簡單記錄e.getMsg輸出的內容;
異常位置:快速定位異常發生的位置[類.方法];
業務參數:特定業務參數場景才能復現的問題;
時間節點:有的并發問題是在特定時間段出現;
異常日志記錄下來之后,還會定期進行任務分析,不斷發現系統容易出問題的地方,然后再不斷的改進和優化。
在微服務架構系統下,某個服務故障或者異常,觸發熔斷該服務,避免引發整個微服務鏈路異常,防止整個系統服務的雪崩。以此緩解服務器資源的的壓力,以保證核心業務的正常運行。
“Java異常體系知識點有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。