Java Exception 详解

Java Exception 详解

一、什么是Exception

术语异常是短语“异常事件”的缩写

定义:异常是在程序执行期间发生的事件,它中断程序指令的正常流动。

当方法中发生错误时,该方法创建一个对象并将其传递给运行时系统。该对象称为异常对象,包含有关错误的信息,包括其类型和发生错误时程序的状态。创建异常对象并将其传递给运行时系统称为引发异常。-
在方法抛出异常后,运行时系统试图找到一些东西来处理它。处理异常的可能“somethings”集合是已调用以到达发生错误的方法的有序方法列表。方法列表称为调用堆栈(请参见下图)。

运行时系统在调用堆栈中搜索包含可以处理异常的代码块的方法。此代码块称为异常处理程序。搜索从发生错误的方法开始,并以调用方法的相反顺序遍历调用堆栈。当找到适当的处理程序时,运行时系统将异常传递给处理程序。如果引发的异常对象的类型与处理程序可以处理的类型匹配,则认为异常处理程序是适当的。-
所选的异常处理程序被称为捕获异常。如果运行时系统穷尽搜索调用堆栈上的所有方法,而没有找到适当的异常处理程序,如下图所示,则运行时系统(以及程序)将终止。

与传统的错误管理技术相比,使用异常来管理错误具有一些优势。您可以在“异常的优势”部分中了解更多信息。

二、捕获或指定要求

有效的Java编程语言代码必须满足Catch或Specify要求。这意味着可能引发某些异常的代码必须由以下任一项括起来:

  • 捕获异常的try语句。try必须为异常提供处理程序,如捕获和处理异常中所述。
  • 指定它可以引发异常的方法。该方法必须提供列出异常的throws子句,如指定由方法引发的异常中所述。

无法满足Catch或Specify要求的代码将无法编译。-
并非所有例外都受Catch或Specify要求的约束。为了理解原因,我们需要研究三种基本的例外类别,其中只有一种符合要求。

三、三种Exceptions

第一种异常是检查异常。这些是编写良好的应用程序应该预见并从中恢复的异常情况。例如,假设应用程序提示用户输入输入文件名,然后通过将名称传递给java.io.FileReader的构造函数来打开该文件。通常,用户提供现有可读文件的名称,因此FileReader对象的构造成功,应用程序的执行正常进行。但有时用户提供不存在的文件的名称,构造函数抛出java.io.FileNotFoundException。编写良好的程序将捕获此异常并通知用户错误,可能会提示输入更正的文件名。-
选中的异常受Catch或Specify要求的约束。除错误、运行时异常及其子类所指示的异常外,所有异常都是检查异常。

**第二种异常是错误。**这些是应用程序外部的异常情况,应用程序通常无法预测或恢复。例如,假设应用程序成功地打开文件以进行输入,但由于硬件或系统故障而无法读取该文件。不成功的读取将引发java.io.IOError。应用程序可能会选择捕获此异常,以通知用户问题-但程序打印堆栈跟踪并退出也可能有意义。-
错误不受Catch或Specify要求的约束。错误是由Error及其子类指示的异常。

第三种异常是运行时异常。这些是应用程序内部的异常情况,应用程序通常无法预测或恢复。这些通常表示编程错误,例如逻辑错误或API使用不当。例如,考虑前面描述的应用程序,该应用程序将文件名传递给FileReader的构造函数。如果逻辑错误导致向构造函数传递null,构造函数将抛出NullPointerException。应用程序可以捕获此异常,但消除导致异常发生的错误可能更有意义。-
运行时异常不受Catch或Specify要求的约束。运行时异常是由RuntimeException及其子类指示的异常。-
错误和运行时异常统称为未检查异常。

更多项目资讯获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取项目下载链接,博主联系方式👇🏻👇🏻👇🏻

链接点击直达:下载链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Java毕业项目分享师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值