溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java中關(guān)于異常的知識(shí)點(diǎn)有哪些

發(fā)布時(shí)間:2022-01-07 16:28:22 來源:億速云 閱讀:102 作者:iii 欄目:編程語言

本文小編為大家詳細(xì)介紹“Java中關(guān)于異常的知識(shí)點(diǎn)有哪些”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Java中關(guān)于異常的知識(shí)點(diǎn)有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

3W原則

哪都有的3W原則,JAVA異常也可以總結(jié)3W:what、where、why

  • what對(duì)應(yīng)異常類型:回答了什么被拋出

  • where對(duì)應(yīng)異常堆棧跟蹤:回答了在哪拋出

  • why對(duì)應(yīng)異常信息:回答了為什么被拋出

異常體系

Java中關(guān)于異常的知識(shí)點(diǎn)有哪些

上圖我們看出Throwable是異常的***類,Error和Exception是他的子類。

Exception又分RuntimeException和非RuntimeException子類。

Error與Exception區(qū)別

我們看一下他們的概念定義:

(1) Error:程序無法處理的系統(tǒng)錯(cuò)誤,編譯器不做檢查。

  • Error表示系統(tǒng)致命的錯(cuò)誤,程序沒法處理。一般是與JVM相關(guān)的問題,如系統(tǒng)崩潰,內(nèi)存溢出,方法調(diào)用棧溢出等,如:經(jīng)常遇到的StackOverflowError、OutOfMemoryError。這種類型的錯(cuò)誤,編譯器不做檢查,都是系統(tǒng)運(yùn)行過程中發(fā)生的。

  • 這些錯(cuò)誤靠我們程序本身是無法處理與預(yù)防的,遇到了建議直接程序中止、重啟。

(2) Exception:程序可以處理的異常,捕獲后可處理。

  • Exception異常是程序能夠捕獲的,也可以做異常處理,我們要盡可能的去處理,使程序繼續(xù)運(yùn)行,而不是中止程序。

  • 總結(jié)一下就是Error是程序無法處理的錯(cuò)誤,Exception是可以處理的異常。

RuntimeException與否區(qū)別

Java中關(guān)于異常的知識(shí)點(diǎn)有哪些

上圖中Exception有兩種類型的異常,我們來看一下。

(1) RuntimeException:不可預(yù)知的,程序應(yīng)當(dāng)自行避免

  • 何為不可預(yù)知?如:數(shù)組下標(biāo)越界,訪問對(duì)象空指針等,這種異常是我們小伙伴們?cè)诰帉懗绦驎r(shí)要盡量避免。也就是我們程序員是能夠避免的。

  • 如針對(duì)空指針異常,我們應(yīng)該在編程的時(shí)候,加上空指針判斷,if(obj == null)如何如何,這樣就避免了空指針異常。

(2) 非RuntimeException:可預(yù)知的,編譯器可檢查的異常

  • 可預(yù)知,如:在我們打開一個(gè)文件時(shí),如文件不存在引用的異常。

  • 這種異常編譯器會(huì)檢查出來,必須需要處理的。

  • 這個(gè)也稱之為Checked Exception異常類型

責(zé)任歸屬

我們從責(zé)任角度看:

  • Error屬于JVM需要承擔(dān)的責(zé)任

  • RuntimeException是程序應(yīng)該承擔(dān)的責(zé)任

  • 非RuntimeException(CheckedException)可檢查異常是JAVA編譯器應(yīng)該承擔(dān)的責(zé)任

上面代碼直觀一點(diǎn):

Java中關(guān)于異常的知識(shí)點(diǎn)有哪些

們看到Error和RuntimeException編譯器是不檢查的,而CheckedExcepton異常編譯器是檢查的,也就是我們程序員是必須要捕獲處理的。那怎么處理呢?

(1) try-catch方式

Java中關(guān)于異常的知識(shí)點(diǎn)有哪些

用try-catch方式捕獲這個(gè)異常,可以在catch代碼段進(jìn)行異常邏輯處理,這個(gè)就按照實(shí)際業(yè)務(wù)而定。如上圖代碼是FileNotFound異常,根據(jù)這個(gè)類型我們就知道是文件句柄不存在,那我們應(yīng)該做哪些處理。如:提示一下用戶該文件不存在

(2) 上拋異常方式

在復(fù)雜的業(yè)務(wù)中,我們的程序員自己寫的模塊,很有可能被其他程序員寫的模塊進(jìn)行引用,為了能夠讓其他程序員知道我們模塊的異常,并要他們要進(jìn)行處理,我們就可以采用上拋異常方式

Java中關(guān)于異常的知識(shí)點(diǎn)有哪些

我們看一下上層調(diào)用的處理

Java中關(guān)于異常的知識(shí)點(diǎn)有哪些

我們看到上拋異常,是需要調(diào)用方進(jìn)行處理的。那處理的方式是什么呢?其實(shí)就是上面講的try-catch或繼續(xù)上拋。

常見的Error和Exception

(1) RuntimeException

  • NullPointerException - 空指針引用異常

  • ClassCastException - 類型強(qiáng)制轉(zhuǎn)換異常

  • IllegalArgumentException - 傳遞非法參數(shù)異常

  • IndexOutOfBoundsException - 下標(biāo)越界異常

  • NumberFormatException - 數(shù)字格式異常

(2) 非RuntimeException

  • ClassNotFoundException - 找不到指定class異常

  • IOException - IO操作異常

(3) Error

  • NoClassDefFoundError - 找不到class定義的異常

  • StackOverflowError - 深遞歸導(dǎo)致棧被耗盡拋出的異常

  • OutOfMemoryError - 內(nèi)存溢出異常

讀到這里,這篇“Java中關(guān)于異常的知識(shí)點(diǎn)有哪些”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI