java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java自定义异常实现

Java中的自定义异常实现方式

作者:破碎的天堂鸟

这篇文章主要介绍了Java中的自定义异常实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、自定义异常的实现步骤

1. 确定继承关系

2. 定义构造方法

至少需包含以下两种构造方法:

public class MyCustomException extends Exception {
    public MyCustomException() {
        super();
    }
    public MyCustomException(String message) {
        super(message);
    }
    // 可选:带原因(Throwable)的构造器
    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. 抛出与捕获

public void validateAge(int age) throws InvalidAgeException {
    if (age < 0) {
        throw new InvalidAgeException("年龄不能为负数");
    }
}

// 调用处
try {
    validateAge(-1);
} catch (InvalidAgeException e) {
    System.err.println("错误信息:" + e.getMessage());
}

二、代码示例与场景分析

示例1:基础自定义异常

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

// 使用场景
public void withdraw(double amount) {
    if (amount > balance) {
        throw new InsufficientBalanceException("余额不足,当前余额:" + balance);
    }
}

示例2:带错误码的异常层次结构

// 根异常
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、命名规范

类名以Exception结尾(如InvalidInputException),增强可读性。

2、异常信息设计

throw new ValidationException("参数 %s 的值 %d 超出范围", "age", 150);

3、异常层次结构

4、受检与非受检异常的选择

5、避免滥用自定义异常

四、常见误区

误区1:异常信息过于模糊

误区2:忽略异常链

try {
    // 可能抛出IOException的代码
} catch (IOException e) {
    throw new DataLoadException("加载数据失败", e); // 传递原始异常
}

误区3:将异常用于流程控制

五、总结

自定义异常通过精准表达错误类型、封装业务逻辑相关的错误信息,显著提升代码可维护性。实现时需注意继承体系设计、构造方法完整性及异常信息的有效性,同时结合项目需求合理选择受检/非受检异常类型。遵循最佳实践可避免常见陷阱,构建健壮的异常处理机制。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文