finally到底是啥?,finally是啥?,在网上找了下答案,是这么
分享于 点击 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
用户点评