文章目录
- 前言
- 自定义异常
- 如何自定义异常类?
- 如何使用自定义异常类?
- 示例
- 为什么需要自定义异常?
前言
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());}}
}
输出结果:
捕获到异常: 余额不足,无法取款!
为什么需要自定义异常?
为了见名知意,通过异常类的名称,就能判断出具体出现的问题,提高了可读性、可维护性,帮助开发者快速定位和处理问题。