您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Java中關于異常的知識點有哪些”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java中關于異常的知識點有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
3W原則
哪都有的3W原則,JAVA異常也可以總結3W:what、where、why
what對應異常類型:回答了什么被拋出
where對應異常堆棧跟蹤:回答了在哪拋出
why對應異常信息:回答了為什么被拋出
異常體系
上圖我們看出Throwable是異常的***類,Error和Exception是他的子類。
Exception又分RuntimeException和非RuntimeException子類。
Error與Exception區別
我們看一下他們的概念定義:
(1) Error:程序無法處理的系統錯誤,編譯器不做檢查。
Error表示系統致命的錯誤,程序沒法處理。一般是與JVM相關的問題,如系統崩潰,內存溢出,方法調用棧溢出等,如:經常遇到的StackOverflowError、OutOfMemoryError。這種類型的錯誤,編譯器不做檢查,都是系統運行過程中發生的。
這些錯誤靠我們程序本身是無法處理與預防的,遇到了建議直接程序中止、重啟。
(2) Exception:程序可以處理的異常,捕獲后可處理。
Exception異常是程序能夠捕獲的,也可以做異常處理,我們要盡可能的去處理,使程序繼續運行,而不是中止程序。
總結一下就是Error是程序無法處理的錯誤,Exception是可以處理的異常。
RuntimeException與否區別
上圖中Exception有兩種類型的異常,我們來看一下。
(1) RuntimeException:不可預知的,程序應當自行避免
何為不可預知?如:數組下標越界,訪問對象空指針等,這種異常是我們小伙伴們在編寫程序時要盡量避免。也就是我們程序員是能夠避免的。
如針對空指針異常,我們應該在編程的時候,加上空指針判斷,if(obj == null)如何如何,這樣就避免了空指針異常。
(2) 非RuntimeException:可預知的,編譯器可檢查的異常
可預知,如:在我們打開一個文件時,如文件不存在引用的異常。
這種異常編譯器會檢查出來,必須需要處理的。
這個也稱之為Checked Exception異常類型
責任歸屬
我們從責任角度看:
Error屬于JVM需要承擔的責任
RuntimeException是程序應該承擔的責任
非RuntimeException(CheckedException)可檢查異常是JAVA編譯器應該承擔的責任
上面代碼直觀一點:
們看到Error和RuntimeException編譯器是不檢查的,而CheckedExcepton異常編譯器是檢查的,也就是我們程序員是必須要捕獲處理的。那怎么處理呢?
(1) try-catch方式
用try-catch方式捕獲這個異常,可以在catch代碼段進行異常邏輯處理,這個就按照實際業務而定。如上圖代碼是FileNotFound異常,根據這個類型我們就知道是文件句柄不存在,那我們應該做哪些處理。如:提示一下用戶該文件不存在
(2) 上拋異常方式
在復雜的業務中,我們的程序員自己寫的模塊,很有可能被其他程序員寫的模塊進行引用,為了能夠讓其他程序員知道我們模塊的異常,并要他們要進行處理,我們就可以采用上拋異常方式
我們看一下上層調用的處理
我們看到上拋異常,是需要調用方進行處理的。那處理的方式是什么呢?其實就是上面講的try-catch或繼續上拋。
常見的Error和Exception
(1) RuntimeException
NullPointerException - 空指針引用異常
ClassCastException - 類型強制轉換異常
IllegalArgumentException - 傳遞非法參數異常
IndexOutOfBoundsException - 下標越界異常
NumberFormatException - 數字格式異常
(2) 非RuntimeException
ClassNotFoundException - 找不到指定class異常
IOException - IO操作異常
(3) Error
NoClassDefFoundError - 找不到class定義的異常
StackOverflowError - 深遞歸導致棧被耗盡拋出的異常
OutOfMemoryError - 內存溢出異常
讀到這里,這篇“Java中關于異常的知識點有哪些”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。