欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的自定義異常實現(xiàn)方式

 更新時間:2025年04月08日 09:53:43   作者:破碎的天堂鳥  
這篇文章主要介紹了Java中的自定義異常實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一、自定義異常的實現(xiàn)步驟

1. 確定繼承關(guān)系

  • 受檢異常(Checked Exception) :需繼承Exception類,適用于必須處理的場景(如文件操作失?。?。
  • 非受檢異常(Unchecked Exception) :繼承RuntimeException類,適用于編程錯誤或不可恢復(fù)問題(如參數(shù)校驗失?。?/li>
  • 錯誤(Error) :一般不自定義,因Error表示嚴(yán)重系統(tǒng)級錯誤(如內(nèi)存溢出)。

2. 定義構(gòu)造方法

至少需包含以下兩種構(gòu)造方法:

  • 默認(rèn)構(gòu)造器:用于無額外信息的異常拋出。
  • 帶消息參數(shù)的構(gòu)造器:傳遞具體錯誤信息,便于調(diào)試。
public class MyCustomException extends Exception {
    public MyCustomException() {
        super();
    }
    public MyCustomException(String message) {
        super(message);
    }
    // 可選:帶原因(Throwable)的構(gòu)造器
    public MyCustomException(String message, Throwable cause) {
        super(message, cause);
    }
}

3. 添加自定義邏輯(可選)

  • 可擴展方法,例如記錄日志、封裝錯誤碼等:
public class BusinessException extends RuntimeException {
    private int errorCode;

    public BusinessException(int errorCode, String message) {
        super(message);
        this.errorCode = errorCode;
    }
    public int getErrorCode() {
        return errorCode;
    }
}

4. 拋出與捕獲

  • 拋出異常:在需要觸發(fā)異常的代碼塊中使用throw語句。
  • 捕獲處理:通過try-catchthrows聲明處理異常。
public void validateAge(int age) throws InvalidAgeException {
    if (age < 0) {
        throw new InvalidAgeException("年齡不能為負數(shù)");
    }
}

// 調(diào)用處
try {
    validateAge(-1);
} catch (InvalidAgeException e) {
    System.err.println("錯誤信息:" + e.getMessage());
}

二、代碼示例與場景分析

示例1:基礎(chǔ)自定義異常

public class InsufficientBalanceException extends RuntimeException {
    public InsufficientBalanceException(String message) {
        super(message);
    }
}

// 使用場景
public void withdraw(double amount) {
    if (amount > balance) {
        throw new InsufficientBalanceException("余額不足,當(dāng)前余額:" + balance);
    }
}

示例2:帶錯誤碼的異常層次結(jié)構(gòu)

// 根異常
public class BaseException extends RuntimeException {
    private String code;

    public BaseException(String code, String message) {
        super(message);
        this.code = code;
    }
    public String getCode() { return code; }
}

// 子類異常
public class UserNotFoundException extends BaseException {
    public UserNotFoundException() {
        super("USER_404", "用戶不存在");
    }
}

三、最佳實踐與注意事項

1、命名規(guī)范

類名以Exception結(jié)尾(如InvalidInputException),增強可讀性。

2、異常信息設(shè)計

  • 避免空消息,需提供具體錯誤描述。
  • 使用參數(shù)化構(gòu)造器支持動態(tài)信息:
throw new ValidationException("參數(shù) %s 的值 %d 超出范圍", "age", 150);

3、異常層次結(jié)構(gòu)

  • 大型項目中,推薦從RuntimeException派生根異常(如BaseException),再擴展業(yè)務(wù)子類。
  • 避免過度繼承,保持層次扁平化。

4、受檢與非受檢異常的選擇

  • 受檢異常:需調(diào)用方顯式處理,適用于可恢復(fù)錯誤(如網(wǎng)絡(luò)重連)。
  • 非受檢異常:適用于編程錯誤(如NullPointerException),避免強制處理帶來的代碼冗余。

5、避免濫用自定義異常

  • 優(yōu)先使用JDK內(nèi)置異常(如IllegalArgumentException、IllegalStateException)。
  • 僅在標(biāo)準(zhǔn)異常無法表達業(yè)務(wù)語義時自定義。

四、常見誤區(qū)

誤區(qū)1:異常信息過于模糊

  • 錯誤示例:throw new Exception("錯誤發(fā)生")。
  • 改進:明確錯誤原因,如throw new FileParseException("第10行格式無效")

誤區(qū)2:忽略異常鏈

  • 應(yīng)通過帶cause參數(shù)的構(gòu)造器保留原始異常:
try {
    // 可能拋出IOException的代碼
} catch (IOException e) {
    throw new DataLoadException("加載數(shù)據(jù)失敗", e); // 傳遞原始異常
}

誤區(qū)3:將異常用于流程控制

  • 異常處理成本高,應(yīng)通過條件判斷等替代方案避免濫用。

五、總結(jié)

自定義異常通過精準(zhǔn)表達錯誤類型、封裝業(yè)務(wù)邏輯相關(guān)的錯誤信息,顯著提升代碼可維護性。實現(xiàn)時需注意繼承體系設(shè)計、構(gòu)造方法完整性及異常信息的有效性,同時結(jié)合項目需求合理選擇受檢/非受檢異常類型。遵循最佳實踐可避免常見陷阱,構(gòu)建健壯的異常處理機制。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 值得Java開發(fā)者關(guān)注的7款新工具

    值得Java開發(fā)者關(guān)注的7款新工具

    作為老牌語言Java,其生態(tài)圈也出來了一些有關(guān)云服務(wù)、監(jiān)控、文檔分享方面的工具,這篇文章主要介紹了Java開發(fā)者值得關(guān)注的7款新工具,感興趣的小伙伴們可以參考一下
    2016-07-07
  • 詳解mybatis流式查詢與分頁插件

    詳解mybatis流式查詢與分頁插件

    這篇文章主要介紹了mybatis流式查詢與分頁插件,本文通過實例代碼給大家講解的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-11-11
  • spring mvc 讀取xml文件數(shù)據(jù)庫配置參數(shù)的方法

    spring mvc 讀取xml文件數(shù)據(jù)庫配置參數(shù)的方法

    下面小編就為大家?guī)硪黄猻pring mvc 讀取xml文件數(shù)據(jù)庫配置參數(shù)的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • spring5 webclient使用指南詳解

    spring5 webclient使用指南詳解

    本篇文章主要介紹了spring 5 webclient使用指南詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • SpringBoot中的Actuator詳解

    SpringBoot中的Actuator詳解

    這篇文章主要介紹了SpringBoot中的Actuator詳解,Spring Boot Actuator 在Spring Boot第一個版本發(fā)布的時候就有了,它為Spring Boot提供了一系列產(chǎn)品級的特性,監(jiān)控應(yīng)用程序,收集元數(shù)據(jù),運行情況或者數(shù)據(jù)庫狀態(tài)等,需要的朋友可以參考下
    2023-09-09
  • IntelliJ IDEA創(chuàng)建maven web項目的圖文步驟(IDEA新手適用)

    IntelliJ IDEA創(chuàng)建maven web項目的圖文步驟(IDEA新手適用)

    這篇文章主要介紹了IntelliJ IDEA創(chuàng)建maven web項目的圖文步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Java中Socket下載一個文本文件

    Java中Socket下載一個文本文件

    這篇文章主要介紹了Socket下載一個文本文件的實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-06-06
  • 在Spring異步調(diào)用中傳遞上下文的方法

    在Spring異步調(diào)用中傳遞上下文的方法

    這篇文章主要給大家介紹了關(guān)于如何在Spring異步調(diào)用中傳遞上下文的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Spring具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Mybatis提示Tag name expected的問題及解決

    Mybatis提示Tag name expected的問題及解決

    MyBatis是一個開源的Java持久層框架,用于將Java對象與數(shù)據(jù)庫表進行映射,它提供了一種簡單、靈活的方式來訪問數(shù)據(jù)庫,同時也提供了強大的SQL映射和查詢功能
    2025-01-01
  • 我用java實現(xiàn)了王者榮耀的皮膚和英雄技能

    我用java實現(xiàn)了王者榮耀的皮膚和英雄技能

    上篇文章主要實現(xiàn)了創(chuàng)建英雄,創(chuàng)建野怪,創(chuàng)建裝備.并且實現(xiàn)了簡單的刷怪,購買裝備等.本篇文章我優(yōu)化了我的操作界面,并且實現(xiàn)了英雄技能,英雄皮膚等,需要的朋友可以參考下
    2021-05-05

最新評論