欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

finally到底是啥?,finally是啥?,在网上找了下答案,是这么

来源: javaer 分享于  点击 44345 次 点评:103

finally到底是啥?,finally是啥?,在网上找了下答案,是这么


在网上找了下答案,是这么解释的:

java对try——catch——finally的执行机制是这样的:在虚拟机不退出,即程序不终止的情况下,finally方法总会得到执行,即便catch块里有return语句也会执行完finally再返回。

至于为什么输出i的值为1,那是因为,在高级语言中(java也不例外),调用一个方法,若其有返回值,总是会返回return后面变量或语句的值,即输出testFinal()方法的return x,执行到这时,x值为“1”,这时java机制会把x存储在某一内存空间,只是由于还有finally还没执行,故暂不返回,等finally执行完毕,就返回刚才已经储存的x值。

其实这道题目,我是从深入理解JVM里面看到的,他是通过反编译 javap -verbose Test

来查看字节指令,通过字节指令来分析为什么是1。原理正如上面所说的一样。

但是我发现反编译出来的指令已经不一样了,说明编译器已经做了很多优化。大家可以试试

private static int testFinal() {    int x = 0;    try {        x = 1;        // throw new Exception();        return x;    } catch (Exception e) {        x = 2;        return x;    } finally {        x = 3;    }}public static void main(String[] args) {    System.out.println(testFinal());}//该片段来自于http://byrx.net
相关栏目:

用户点评