代生生男孩哪里好,你真的了解Java异常处理机制吗?

2022-03-19 作者:admin   |   浏览(532)
供卵公立医院

一、什么是Java异常?

java异常指,如:文件找不到、、非法参数等。异常是一个事件,它发生在程序运行期间,中断了正在执行的程序的正常指令流。Java通过API中Throwable类的众多子类描述各种不同的异常。

因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的错误条件。,错误将引发异常。

二、异常的简单分类

检查性异常(CheckedException):最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的,但是部分IDE会予以提示。例如要打开一个不,一个异常就发生了,这些,没有处理Checked异常,该。这体现了Java的设计哲学:没有完善错误处理的代码根本没有机会被执行。

(RuntimeException):免的异常。与检查性异常相反,,但是此,程序应该从逻辑角度尽可能避免这类异常的发生。这种异常可以选择捕获处理,也可以不处理(比如1/0所发生的算数异常,若显示申明或者捕获将会对程序的可读性和运行效率影响很大)。

错误ERROR:错误不是异常,而是脱离程序员控制的问题。当程序发生不,通常做法是通知用户并中止程序的执行。例如,,一个错误就发生了,程序也就被强行终止了,。Error由Java虚拟机生成并抛出,包括动态链接失败,虚拟机错误等。程序对其不做处理。

三、异常的基本用法

Java异常处理依赖于5个关键字:try、catch、finally、throws、throw。下面来逐一介绍下。

①try:try块中主要放置可能会产生异常的代码块。如果执行try块里的业,系统会自动生成一个异常对象,该异常对象被提交给运行环境,这个过程被称为抛出(throw)异常。Java环境收,会寻找合适的catch块(在本方法或是调用方法)。

②catch: catch 代码块中放的是出现异常后的处理行为,也可以写此异常出错的原因或者打印栈上的错误信息。但catch语句不能为空,因为一旦将catch语句写为空,就代表忽略了此异常。

③finally:finally 代码块中的代码用于处理善后工作, 会在最后执行,也一定会被执行。当遇到try或catch中return或throw之类可以终止当前,jvm会先去执行finally中的语句,当finally中的语句执行完毕后才会返回来执行try/catch中的return,throw语句。如果finally中有return或throw,那么将执行这些语句,不会在执行try/catch中的return或throw语句。finally块中一般写的是关闭资源之类的代码。

④throws:在方法的签名中,用于抛出此方法中的异常给调用者,调用者可以选择捕获或者抛出,如果所有方法(包括main)都选择抛出(或者没有合适的处理异常的方式,即异常类型不匹配)那么最终将会抛给JVM,就会像我们之前没使用try、catch语句一样。JVM打印出栈轨迹(异常链)。

⑤throw:用于抛出一个具体的异常对象。常用于自定义异常类中。ps:关于 "调用栈",方法之间是存在相互调用关系的, 这种调用关系我们可以用 "调用栈" 来描述,在 JVM 中有一块内存空间称为 "虚拟机栈" 专门存储方法之间的调用关系. 当代码中, 我们就可以使用 的方式查看出现异常代码的调用栈,一般写在catch语句中。

四、异常处理流程

程序先执行 try 中的代码 如果 try 中的代码出现异常, 就会结束 try 中的代码, 看和 catch 中的异常类型是否匹配 如果找到匹配的异常类型, 就会执行 catch 中的代码 如果没有找到匹配的异常类型, 就会将异常向上传递到上层调用者 无论是否找到匹配的异常类型, finally 中的代码都会被执行到(在该方法结束之前执行) 如果上层调用者也没有处理的了异常, 就继续向上传递 一直到 main 方法也没有合适的代码处理异常, 就会交给 JVM 来进行处理,

参考资料

标签: