詳解Java的內(nèi)置異常以及創(chuàng)建自定義異常子類的方法
內(nèi)置異常子類
在標(biāo)準(zhǔn)包java.lang中,Java定義了若干個(gè)異常類。前面的例子曾用到其中一些。這些異常一般是標(biāo)準(zhǔn)類RuntimeException的子類。因?yàn)閖ava.lang實(shí)際上被所有的Java程序引入,多數(shù)從RuntimeException派生的異常都自動(dòng)可用。而且,它們不需要被包含在任何方法的throws列表中。Java語(yǔ)言中,這被叫做未經(jīng)檢查的異常(unchecked exceptions )。因?yàn)榫幾g器不檢查它來(lái)看一個(gè)方法是否處理或拋出了這些異常。 java.lang中定義的未經(jīng)檢查的異常列于表1。表2列出了由 java.lang定義的必須在方法的throws列表中包括的異常,如果這些方法能產(chǎn)生其中的某個(gè)異常但是不能自己處理它。這些叫做受檢查的異常(checked exceptions)。Java定義了幾種與不同類庫(kù)相關(guān)的其他的異常類型。
表1:Java 的 java.lang 中定義的未檢查異常子類
表2:java.lang 中定義的檢查異常
使用Java創(chuàng)建自己的異常子類
盡管Java的內(nèi)置異常處理大多數(shù)常見(jiàn)錯(cuò)誤,你也許希望建立你自己的異常類型來(lái)處理你所應(yīng)用的特殊情況。這是非常簡(jiǎn)單的:只要定義Exception的一個(gè)子類就可以了(Exception當(dāng)然是Throwable的一個(gè)子類)。你的子類不需要實(shí)際執(zhí)行什么——它們?cè)陬愋拖到y(tǒng)中的存在允許你把它們當(dāng)成異常使用。
Exception類自己沒(méi)有定義任何方法。當(dāng)然,它繼承了Throwable提供的一些方法。因此,所有異常,包括你創(chuàng)建的,都可以獲得Throwable定義的方法。這些方法顯示在表3中。你還可以在你創(chuàng)建的異常類中覆蓋一個(gè)或多個(gè)這樣的方法。
表3 Throwable 定義的方法
下面的例子聲明了Exception的一個(gè)新子類,然后該子類當(dāng)作方法中出錯(cuò)情形的信號(hào)。它重載了toString( )方法,這樣可以用println( )顯示異常的描述。
// This program creates a custom exception type. class MyException extends Exception { private int detail; MyException(int a) { detail = a; } public String toString() { return "MyException[" + detail + "]"; } } class ExceptionDemo { static void compute(int a) throws MyException { System.out.println("Called compute(" + a + ")"); if(a > 10) throw new MyException(a); System.out.println("Normal exit"); } public static void main(String args[]) { try { compute(1); compute(20); } catch (MyException e) { System.out.println("Caught " + e); } } }
該例題定義了Exception的一個(gè)子類MyException。該子類非常簡(jiǎn)單:它只含有一個(gè)構(gòu)造函數(shù)和一個(gè)重載的顯示異常值的toString( )方法。ExceptionDemo類定義了一個(gè)compute( )方法。該方法拋出一個(gè)MyException對(duì)象。當(dāng)compute( )的整型參數(shù)比10大時(shí)該異常被引發(fā)。
main( )方法為MyException設(shè)立了一個(gè)異常處理程序,然后用一個(gè)合法的值和不合法的值調(diào)用compute( )來(lái)顯示執(zhí)行經(jīng)過(guò)代碼的不同路徑。下面是結(jié)果:
Called compute(1) Normal exit Called compute(20) Caught MyException[20]
相關(guān)文章
優(yōu)化spring?boot應(yīng)用后6s內(nèi)啟動(dòng)內(nèi)存減半
這篇文章主要為大家介紹了優(yōu)化spring?boot后應(yīng)用6s內(nèi)啟動(dòng)內(nèi)存減半的優(yōu)化示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-02-02使用profiles進(jìn)行多環(huán)境配置的代碼實(shí)現(xiàn)
在項(xiàng)目開(kāi)發(fā)的過(guò)程中會(huì)用到多個(gè)環(huán)境,為了便于開(kāi)發(fā)使用,通常需要使用profiles進(jìn)行多環(huán)境配置,所以本文給大家介紹了使用profiles進(jìn)行多環(huán)境配置的代碼實(shí)現(xiàn),需要的朋友可以參考下2024-02-02spring cloud服務(wù)連接超時(shí)問(wèn)題及解決
這篇文章主要介紹了spring cloud服務(wù)連接超時(shí)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01Spring Boot jar可執(zhí)行原理的徹底分析
這篇文章主要給大家介紹了關(guān)于Spring Boot jar可執(zhí)行原理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07淺談web項(xiàng)目讀取classpath路徑下面的文件
這篇文章主要介紹了淺談web項(xiàng)目讀取classpath路徑下面的文件,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01JavaWeb使用mvc模式實(shí)現(xiàn)登錄功能
本文主要介紹了JavaWeb使用mvc模式實(shí)現(xiàn)登錄功能,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01