前言
Java是一门功能强大且广泛应用的编程语言,具有跨平台性和高效的执行速度,广受开发者喜爱。在接下来的学习过程中,我将记录学习过程中的基础语法、框架和实践技巧等,分享学习心得,对自己学习过程进行整理和总结,也希望能为其他学习Java的朋友提供一些帮助和参考。
自定义异常
在Java中,自定义异常需要创建一个类,该类通常继承自Exception
类或RuntimeException
类。以下是创建自定义异常的基本步骤:
- 定义异常类:
- 创建一个类,继承自
Exception
(用于检查异常)或RuntimeException
(用于非检查异常,也就是运行时异常)。 - 提供构造函数,可以根据需要重载构造函数。
-
抛出异常:使用
throw
关键字来抛出自定义异常。 -
捕获异常:使用
try-catch
块捕获自定义异常。
如何自定义异常类?
- 继承于现有的异常体系。通常继承于RuntimeException \ Exception
- 通常提供几个重载的构造器
- 提供一个全局常量,声明为:static final long serialVersionUID;
如何使用自定义异常类?
- 在具体的代码中,满足指定条件的情况下,需要手动的使用"throw+自定义异常类的对象"方式,将异常对象抛出。
- 如果自定义异常类是非运行时异常,则必须考虑如何处理此异常类的对象。(具体的:①try-catch-finally ②throws)
示例
- 定义自定义异常类
// 自定义异常类,继承 RuntimeException(非检查异常)
public class CustomException extends RuntimeException {
// 定义唯一ID,确保异常类的序列化版本一致性
private static final long serialVersionUID = 1L;
// 无参构造函数
public CustomException() {
super();
}
// 接受异常信息的构造函数
public CustomException(String message) {
super(message);
}
// 接受异常信息和异常原因的构造函数
public CustomException(String message, Throwable cause) {
super(message, cause);
}
// 接受异常原因的构造函数
public CustomException(Throwable cause) {
super(cause);
}
}
- 使用自定义异常
在业务逻辑中,可以根据需要抛出自定义异常。假设我们有一个简单的银行账户操作,当余额不足时抛出自定义异常:
public class BankAccount {
private double balance;
public BankAccount(double balance) {
this.balance = balance;
}
// 模拟取款操作,当余额不足时抛出自定义异常
public void withdraw(double amount) throws CustomException {
if (amount > balance) {
throw new CustomException("余额不足,无法取款!");
}
balance -= amount;
System.out.println("取款成功,当前余额:" + balance);
}
}
- 捕获自定义异常
使用try-catch
块来捕获和处理自定义异常。
public class Main {
public static void main(String[] args) {
BankAccount account = new BankAccount(100);
try {
account.withdraw(150); // 试图取款超过余额,抛出自定义异常
} catch (CustomException e) {
System.out.println("捕获到异常: " + e.getMessage());
}
}
}
输出结果:
捕获到异常: 余额不足,无法取款!
为什么需要自定义异常?
为了见名知意,通过异常类的名称,就能判断出具体出现的问题,提高了可读性、可维护性,帮助开发者快速定位和处理问题。