java – JVM如何执行Try catch finally块
根据
Java语言规范,Section §14.20.2
如果我正确解释它然后在执行try块finally之后调用,但是这一切是如何工作的以及为什么我得到了输出, public static int TestTryFinallyBlock() { int i =0; try { i= 10; //Perform some more operation return i; } finally { i = 40; } } public static void main( String[] args ) { int i1 = TestTryFinallyBlock(); //Here the output was 10 not 40 } 我想知道这个东西是如何产生输出10的.
我知道首先遇到返回然后最后阻塞运行所以输出是10,但是 解决方法
经过一点点搜索并看到生成了什么字节码后,我发现实际上没有看起来没有finally块,也没有JVM生成的跳转或goto语句.
上面的代码被翻译为(如果我正确解释字节代码,如果我错了请请纠正我) public static int TestTryFinallyBlock() { int returnValue; //A temporary return variable try { int i = 0; i = 10; returnValue = i; i = 40; return returnValue; } catch (RuntimeException e) { i = 40; //finally section code id copied here too throw e; } } 注意:如果’i’是对可变类对象的引用,并且在finally块中更改了对象的内容,那么这些更改也会反映在返回的值中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |