在java基础学习过程中,存在着很多容易被人们忽略的小细节。此系列文章专门用来总结这类知识,后续会不定时更新(也可能会不更新)。

下图代码,最终的输出结果是多少呢?

这是一个很基础的代码案例,显而易见,大多数的初学者都能看出result为30 ,但是很少人不知道a为什么是30而不是finally代码块中的40(甚至也有工作几年的程序员也不知道其原理)。

那到底为什么a是30而不是40呢?finally代码块执行了吗?

我们可以通过debug得到答案是肯定的。

a的初始值为10在抛出异常后重新给a赋值为30,这时则会把a的值暂时存储后进入finally代码块,等finally代码块执行完毕再回到return语句返回刚才保存的值。然而这一切到底是怎么实现的呢?我们可以对字节码文件进行反编译得到java代码,下图详解

发表评论

电子邮件地址不会被公开。 必填项已用*标注