try catch finally异常机制Java源码+JVM字节码(内含小彩蛋)

异常分为:

Exception : 运行时异常,我们需要捕获并且处理,让程序自己恢复正常运行。
Error : 编译时异常(程序本身无法处理的异常:系统崩溃,虚拟机报错,内存不足,内存溢出)。

直接上代码:
在这里插入图片描述
这里看到可以catch到的是Exception异常。有一些编译时可能会发生的异常也会提示我们throws抛出或者捕获,否则无法通过编译。
一步步来,先看看Exception和Error到底是个什么东西。

Exception:发现继承自Throwable

在这里插入图片描述

Error:(也是继承自Throwable)

在这里插入图片描述

所以Error和Exception两个异常类都继承自Throwable。这里借网上一张关系图:

在这里插入图片描述

知道了这些基本概念后,开始看编译时的字节码文件长个什么样,其中还包含了很多意想不到的小惊喜。

先编译并且查看字节码文件

在这里插入图片描述

其他操作指令介绍在我另外一篇博客,这里直奔主题!

彩蛋1:

在这里插入图片描述

这里有个很有趣的地方,明明代码里面只有一个finally,为什么这里有三个finally???那就是一个面试必问点,finally是异常机制中必定执行的语句块,在JVM字节码指令中为了确保它一定被执行,所有地方都会加一段这个finally要执行的代码。

(1)第一个地方,假设没有异常,正常执行后也执行finally里面的输出
(2)第二个地方。有异常,捕获处理完后,也执行finally里面的输出
(3)第三个地方。有异常并且没有捕获到,因为我们定义的运行时异常很多,如果指定的Type类型不对应catch到的,或者是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值