java 异常信息 throwable 还是exception

#背景

在项目开发中,有时会遇到需要抛异常的场景,下层抛异常,上层使用者需要用try{}catch ()进行捕获,但有时候,捕获的异常信息的定义,会有点犯难,不知道使用哪个异常信息回更好,我前几天写了一个捕获异常信息,我使用的是Trowable e去接收异常,但同事认为应该使用Excption e 接收,因为下游的异常是“throw  Exception”,但我想着,throwable是exception 的父类,理论上是可以使用的。

最终也没解释出所以然,归结于自己对异常知识了解的太少,归纳一下,重新学习一下。

看了源码 了解到:

Java语言要求java程序中所有抛出(throw)的异常都必须是从Throwable派生而来。
对于java程序员而言,它一般只需要在它的顶级函数中catch(Exception ex)就可以捕获
出所有的异常对象。所有异常对象的根基类是 Throwable ,Throwable从Object直接继承而来
(这是java系统所强制要求的),并且它实现了 Serializable接口
(这为所有的异常对象都能够轻松跨越Java组件系统做好了最充分的物质准备)。
从Throwable直接派生出的异常类有Exception和Error 。
 Exception 和从它派生而来的所有异常都是应用程序能够catch到的
,并且可以进行异常错误恢复处理的异常类型。
而Error则表示Java系统中出现了一个非常严重的异常错误,
并且这个错误可能是应用程序所不能恢复的。

throwable虽然是父类,Throwable类是所有异常信息的超类(父类)。并不是等级越高越好,要有专业性的范围区间。报错信息要有针对性,才是更加适用代码,写出的代码也更有质量。它的直接子类就是Exception 和Error。

针对异常信息,就两个处理方法,:捕获(try catch)或者抛出 (throw)

Exception子类包括可检查异常(如IOException、SQLException)和不可检查异常(如NullPointerException、ArrayIndexOutOfBoundsException),可检查异常必须在代码中显式处理或声明抛出,而不可检查异常通常由编程错误引起,可以在程序中避免发生。

Exception:常用的异常信息

IllegalMonitorStateException监控器状态出错引起的异常
NegativeArraySizeException一数组长度是负数,则产生异常
SQLException数据库异常

NullPointerException

一程序试图访问一个空的数组中的元素或访问空的对象中的 方法或变量时产生异常
OutofMemoryException用new语句创建对象时,如系统无法为其分配内存空 间则产生异常
SecurityException由于访问了不应访问的指针,使安全性出问题而引起异常
IndexOutOfBoundsExcention由于数组下标越界或字符串访问越界引起异常
IOException由于文件未找到、未打开或者I/O操作不能进行而引起异常
ClassNotFoundException未找到指定名字的类或接口引起异常
CloneNotSupportedException程序中的一个对象引用Object类的clone方法,但 此对象并没有连接Cloneable接口,从而引起异常

 

我看到下层的查询逻辑,使用的是throw Exception 查询逻辑抛出数据库异常很合理。

专人做专事,术业有专攻,既然定义了不通的异常报错,就要有专业的异常名词去接收,这样就更有针对性,这样的异常对于我们来说也是一种已知的异常。

当然了,如果不知道可能会报出什么样的异常,用专业范围小的异常信息去捕获也是捕获不到的,这时就可以使用throwable进行异常捕获。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值