Java中的异常分类

对于异常情况,Java中使用了一种称为异常处理的错误捕获机制。

Java允许每个方法有一个候选的退出路径,当方法不能以正常的方式运行至退出语句时(不能正常退出),这时就会选择这个退出路径,通过这个退出路径来退出方法。在这种情况下,方法不会返回一个值,而是抛出(throw) 一个封装了错误信息的对象。

需要注意:
通过这种候选的退出路径退出时,这个方法会立刻退出,并不返回正常值(或任何值)。此外,也不会从调用这个方法的代码继续执行,取而代之的是,异常处理机制开始搜索一个能够处理这种异常状况的异常处理器(exception handler)

在Java程序设计语言中,异常对象都是派生于Throwable类的一个类的实例。

异常分类:

Java中的异常层次结构如下图所示:
在这里插入图片描述

由图可知:所有的异常类都是Throwable的子类。而Throwable又分为两个分支:Error和Exception

Java语言规范将异常分为两类:非检查型异常检查型异常

非检查型异常:

非检查型异常包括派生于Error类或RuntimeException类的所有异常。

Error类的异常描述了Java运行时系统的内部错误资源耗尽问题。如果出现了这样的内部错误,除了通知用户,并尽力妥善的终止程序之外,我们几乎无能为力,但这种情况很少出现。因此,我们不应该抛出这种类型的对象。

继承自RuntimeException的异常包括以下问题:

  1. 错误的强制类型转换
  2. 越界的数组访问
  3. 访问null指针

这些运行时错误完全在我们的控制之中。我们应当谨慎一些,避免这些错误发生;因此,我们不应该抛出这种类型的对象。

也就是说,这些非检查型要么在我们的控制之外(Error),要么完全可以避免(RuntimeException);因此,我们不应该抛出非检查型异常

检查型异常:

非检查型异常之外的所有异常(包括派生于IOException类的异常我们自己创建的异常类)称为检查型异常

检查型异常包括:

  1. 试图越过文件末尾继续读取数据
  2. 试图打开一个不存在的文件
  3. 试图根据给定的字符串查找Class对象,而这个字符串表示的类并不存在

因此,一个方法必须声明所有可能抛出的检查型异常

需要注意的是:如果子类中覆盖了超类的一个方法,并且超类的这个方法抛出了检查型异常,那么子类方法中声明的检查型异常不能比超类方法中的异常更通用(子类方法可以抛出更特定的异常,或者根本不抛出任何异常)。如果超类被重写的方法中没有抛出任何检查型异常,那么子类方法中也不能抛出任何检查型异常。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小小挫折_仅此而已

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

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

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

打赏作者

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

抵扣说明:

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

余额充值