學(xué)習(xí)Java之自定義異常與NullPointerException的處理
一. 自定義異常
1. 簡(jiǎn)介
現(xiàn)在我們應(yīng)該知道,Java中的異常是指在程序運(yùn)行時(shí)出現(xiàn)的錯(cuò)誤或意外情況,例如無(wú)效的參數(shù)、空指針引用、數(shù)組越界等。Java提供了一些內(nèi)置的異常類,比如NullPointerException、ArrayIndexOutOfBoundsException等。但如果我們想拋出自己定義的異常,就需要自定義異常類了。
另外Java中的異常都繼承自Throwable類,Throwable類又分為Error和Exception兩種。其中Error表示嚴(yán)重的系統(tǒng)級(jí)錯(cuò)誤,一般不會(huì)被程序員處理;而Exception則表示程序運(yùn)行時(shí)的異常,需要程序員進(jìn)行處理。所以當(dāng)我們自定義異常時(shí),一般都要繼承自Exception或其子類;如果自定義運(yùn)行時(shí)異常類,則需繼承RuntimeException類或其子類。
2. 基本語(yǔ)法
一般自定義異常時(shí),其基本語(yǔ)法格式如下
class 自定義異常類名 extends Exception或子類
大家要注意,自定義異常類一般至少要包含兩個(gè)構(gòu)造方法:一個(gè)是無(wú)參的默認(rèn)構(gòu)造方法,另一個(gè)是帶有字符串類型的構(gòu)造方法,該字符串用于接收一個(gè)定制的異常消息,并可以將該消息傳遞給超類的構(gòu)造方法。
另外在命名上,我們一般是將自定義異常類命名為XXXException,XXX用來(lái)代表該異常的作用。
接下來(lái)就設(shè)計(jì)一個(gè)代碼案例,來(lái)給大家演示該如何進(jìn)行自定義異常。
3. 自定義異常類
下面這個(gè)案例是自定義的異常類,帶有4個(gè)構(gòu)造方法。
/**
* @author 一一哥Sun
* 自定義異常
*/
public class MyException extends Exception {
public MyException() {
}
public MyException(String message) {
super(message);
}
public MyException(Throwable cause) {
super(cause);
}
public MyException(String message, Throwable cause) {
super(message, cause);
}
}在這個(gè)示例中,定義了一個(gè)名為MyException的異常類,它繼承自Exception類,另外很多時(shí)候我們也會(huì)繼承自RuntimeException。這里我們定義了4個(gè)構(gòu)造方法,一個(gè)是無(wú)參構(gòu)造方法,另外三個(gè)都是有參的構(gòu)造方法,用于在創(chuàng)建異常對(duì)象時(shí)傳遞異常信息,以滿足不同情況下的需求。
當(dāng)異常類被定義出來(lái)后,我們就可以使用了。使用自定義異常類和使用Java標(biāo)準(zhǔn)異常類并沒(méi)有什么區(qū)別,同樣是在需要拋出異常的地方使用throw語(yǔ)句拋出即可,如下所示:
import java.io.IOException;
/**
* @author 一一哥Sun
*/
public class Demo12 {
public static void main(String[] args) throws IOException {
try {
test();
} catch (MyException e) {
//捕獲處理自定義異常
e.printStackTrace();
}
}
//拋出一個(gè)自定義異常
public static void test() throws MyException {
throw new MyException("這是一個(gè)自定義異常哦");
}
}這段代碼中,我們?cè)趍ain方法中使用throw語(yǔ)句拋出了一個(gè)自定義異常對(duì)象,并在catch語(yǔ)句塊中捕獲了該異常并輸出了異常信息。因?yàn)槲覀兊淖远x異常類是繼承自Exception類,所以自定義異常類中會(huì)包含父類中所有的屬性和方法。
4. 最佳實(shí)踐
在實(shí)際開發(fā)中,我們需要根據(jù)實(shí)際情況來(lái)判斷是否需要自定義異常。如果某個(gè)異常在程序中多次出現(xiàn),而且這個(gè)異常有固定的處理方式,那么此時(shí)我們就可以自定義一個(gè)異常類。否則,直接使用Java內(nèi)置的異常類即可。
我們?cè)谧远x異常類時(shí),需要遵從以下幾點(diǎn)建議:
- 自定義異常類需要繼承自Exception、 RuntimeException 或 其子類;
- 自定義異常類需要提供多個(gè)有用的構(gòu)造函數(shù),以便在需要時(shí)可以傳遞額外的異常信息;
- 在使用自定義異常類時(shí),應(yīng)該選擇合適的try-catch語(yǔ)句塊來(lái)捕獲異常;
- 拋出異常時(shí),盡量復(fù)用JDK自身的異常類型;
- 在使用自定義異常類時(shí),應(yīng)該在方法聲明中使用throws語(yǔ)句來(lái)聲明可能拋出的異常,以便其他程序員在調(diào)用該方法時(shí)能夠正確處理異常;
- 要為異常類提供有意義的名稱,以便讓程序員知道這個(gè)異常是什么作用。
二. 結(jié)語(yǔ)
至此,就把今天的內(nèi)容講解完畢了,你學(xué)會(huì)了嗎?今天的重點(diǎn)內(nèi)容如下:
- 自定義異常類需要繼承自Exception、 RuntimeException 或 其子類;
- 自定義異常類需要提供多個(gè)有用的構(gòu)造函數(shù),以便在需要時(shí)可以傳遞額外的異常信息。
以上就是學(xué)習(xí)Java之自定義異常與NullPointerException的處理的詳細(xì)內(nèi)容,更多關(guān)于Java異常與NullPointerException的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot中實(shí)現(xiàn)數(shù)據(jù)脫敏處理的方法詳解
項(xiàng)目開發(fā)中,在處理敏感信息時(shí),數(shù)據(jù)脫敏是一項(xiàng)重要的安全措施,本文主要為大家介紹了如何在SpringBoot項(xiàng)目中進(jìn)行數(shù)據(jù)脫敏處理,有需要的可以了解下2025-03-03
Java開發(fā)之Spring連接數(shù)據(jù)庫(kù)方法實(shí)例分析
這篇文章主要介紹了Java開發(fā)之Spring連接數(shù)據(jù)庫(kù)方法,以實(shí)例形式較為詳細(xì)的分析了Java Spring開發(fā)中針對(duì)數(shù)據(jù)庫(kù)的相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
Shiro 控制并發(fā)登錄人數(shù)限制及登錄踢出的實(shí)現(xiàn)代碼
本文通過(guò)shiro實(shí)現(xiàn)一個(gè)賬號(hào)只能同時(shí)一個(gè)人使用,本文重點(diǎn)給大家分享Shiro 控制并發(fā)登錄人數(shù)限制及登錄踢出的實(shí)現(xiàn)代碼,需要的朋友參考下吧2017-09-09
解析Spring中的靜態(tài)代理和動(dòng)態(tài)代理
學(xué)習(xí) Spring 的過(guò)程中,不可避免要掌握代理模式。這篇文章總結(jié)一下代理模式。顧名思義,代理,就是你委托別人幫你辦事,所以代理模式也有人稱作委托模式的。比如領(lǐng)導(dǎo)要做什么事,可以委托他的秘書去幫忙做,這時(shí)就可以把秘書看做領(lǐng)導(dǎo)的代理2021-06-06
java使用JNA(Java Native Access)調(diào)用dll的方法
java使用JNA(Java Native Access)調(diào)用windows系統(tǒng)的dll文件的例子2013-11-11

