自定义异常类是继承Execption异常还是继承RuntimeExecption异常?

1.继承Execption异常还是继承RuntimeExecption的区别

想分辨这两种的区别,首先要介绍可检查异常不可检查异常,何为可检查何为不可检查?可以参考博客Throwable、Exception、Error分析

  • 可检查的异常(checked Execption):可检查异常必须在代码中显式的捕获,这是编译期工作的一部分,不然无法通过编译。
  • 不可检查异常:不可检查即意味着编译期检测不出来的异常,此类异常是运行时异常(RuntimeExecpiton,除此异常外都是可检查异常)。

RuntimeExecption是Execption的子类,RuntimeExecption是不可检查异常,而Execption是可检查异常

2.1继承Execption类

当你继承了Execption类,意味着你的类在抛出后必须被处理这样的优劣如下:

  • 优点:异常总能被捕获(强制你必须捕获处理,不然不能通过编译),从而来修正程序的运行,使程序能继续运行下去。
  • 缺点:异常总是要被捕获:要么继续向上层抛出-方法耦合严重,一旦最内层方法不抛出异常了外层的方法全要改;要么try-catch处理-满屏try-catch或者方法后面全是throws Execption导致代码很不美观。

2.2继承RuntimeExecption类

当你继承了RuntimeExecption,优劣如下:

  • 优点:万事大吉,抛出异常我想处理就处理,不想处理也没啥事,程序继续运行(如果他还能正常运行)。
  • 缺点: 对于必须处理的异常而你又把它声明成了RuntimeExecption(不可检查异常)。比如说转账,余额不足是可检查异常,正常情况这时候抛异常弹出异常提示程序正常运行,你把余额不足声明成RuntimeExecption,好了,另外一个程序员他不知道捕获这个异常,运行程序也不报错(不可检查异常特质),余额不足,转账继续进行,程序GG。

3 如何选择

所以,继承哪个类是从用法角度来考虑的:

当你是系统架构者:
  • 你想减少程序的耦合性,于是你自定义的异常类继承了RuntimeExexption,你又告诉自己的成员,约定好:某某自定义异常一定要在哪一层捕获处理,这样莫得问题。
  • 某个异常它不需要处理,但是你要做日志记录,于是你自定义异常类继承RuntimeExecption,并在里面记录日志,ok,这也没问题。
当你是接口提供者

你的程序接口要给用户用,你可以继承Execption,你不和他约定他也会知道,因为他不捕获处理这个异常他编译不了。

  • 10
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
创建自定义异常时,通常需要继承`Exception`或其子,以便能够在代码使用try-catch块或者throws语句来处理异常。 `Exception`是Java所有异常的超,它本身也是一个受检异常(checked exception)。因此,当我们创建自定义异常时,通常也会继承`Exception`,以便让该异常成为一个受检异常。 以下是一个自定义异常的示例,该异常继承了`Exception`: ```java public class MyException extends Exception { // 构造方法 public MyException() { super(); } public MyException(String message) { super(message); } } ``` 在上面的示例,我们创建了一个名为`MyException`的自定义异常,并且让它继承了`Exception`。该有两个构造方法,分别用于创建一个没有详细信息的异常对象和一个带有详细信息的异常对象。 通过继承`Exception`,我们可以让`MyException`成为一个受检异常,并且可以使用try-catch块或者throws语句来处理该异常。例如: ```java public void doSomething() throws MyException { // 抛出自定义异常 throw new MyException("Something wrong happened."); } public static void main(String[] args) { try { doSomething(); } catch (MyException e) { // 处理异常 e.printStackTrace(); } } ``` 在上面的示例,`doSomething()`方法抛出了一个`MyException`异常,而在调用该方法时,我们使用了try-catch块来捕获该异常并进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值