JAVA高级异常处理(自定义异常类)

在Java中,自定义异常类可以让你更精确地表达程序中可能发生的特定错误情况。自定义异常通常用于业务逻辑错误,其中Java标准异常类无法充分描述发生的异常情况。自定义异常通过继承Java的异常类(ExceptionRuntimeException)来实现。

自定义检查型异常(Checked Exception)

检查型异常必须在方法的签名中声明,并且调用这个方法的代码必须处理这个异常,要么通过try-catch块捕获它,要么通过throws关键字在方法签名中声明继续向上抛出。

public class CustomCheckedException extends Exception {
    public CustomCheckedException() {
        super();
    }

    public CustomCheckedException(String message) {
        super(message);
    }

    public CustomCheckedException(String message, Throwable cause) {
        super(message, cause);
    }

    public CustomCheckedException(Throwable cause) {
        super(cause);
    }
}

使用自定义检查型异常:

public void doSomething() throws CustomCheckedException {
    // 业务逻辑代码
    throw new CustomCheckedException("发生了一个错误");
}

自定义非检查型异常(Unchecked Exception)

非检查型异常(也称为运行时异常)不需要显式地在方法签名中声明,也不要求调用者处理这些异常。它们通常表示程序中的逻辑错误。

public class CustomUncheckedException extends RuntimeException {
    public CustomUncheckedException() {
        super();
    }

    public CustomUncheckedException(String message) {
        super(message);
    }

    public CustomUncheckedException(String message, Throwable cause) {
        super(message, cause);
    }

    public CustomUncheckedException(Throwable cause) {
        super(cause);
    }
}

使用自定义非检查型异常:

public void doSomething() {
    // 业务逻辑代码
    throw new CustomUncheckedException("发生了一个逻辑错误");
}

实践教程

  1. 定义自定义异常类:根据你的业务需求,决定继承Exception还是RuntimeException。如果希望调用者强制处理异常,则选择Exception;如果异常由程序员错误导致,则选择RuntimeException

  2. 添加构造函数:在自定义异常类中,添加不同的构造函数。最起码,你应该包含一个无参构造函数和一个带有详细错误信息的字符串参数的构造函数。

  3. 在适当的地方抛出异常:在你的业务逻辑中,当遇到需要用到自定义异常的场景时,使用throw关键字抛出自定义异常实例。

  4. 处理异常:如果你定义了一个检查型异常,确保在调用该异常的地方使用try-catch块来捕获和处理异常,或者在方法签名中用throws关键字声明该异常。

示例:自定义异常实践

public class BankAccount {
    private double balance;

    // 构造函数
    public BankAccount(double balance) {
        this.balance = balance;
    }

    // 取款方法,当余额不足时抛出自定义检查型异常
    public void withdraw(double amount) throws InsufficientFundsException {
        if (amount > balance) {
            throw new InsufficientFundsException("余额不足");
        }
        balance -= amount;
    }

    // 自定义检查型异常
    public static class InsufficientFundsException extends Exception {
        public InsufficientFundsException(String message) {
            super(message);
        }
    }

    public static void main(String[] args) {
        BankAccount account = new BankAccount(100);
        try {
            account.withdraw(200);
        } catch (InsufficientFundsException e) {
            e.printStackTrace();
        }
    }
}

在上述示例中,我们定义了一个BankAccount类,该类中的withdraw方法在余额不足时会抛出自定义的检查型异常InsufficientFundsException。这里展示了如何在业务逻辑中使用自定义异常来

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值