首页 > 代码库 > Java中Return和Finally执行顺序的实现
Java中Return和Finally执行顺序的实现
下面这段代码的执行结果是怎样的呢?
[java] view plaincopyprint?
- publc int test(){
- int x;
- try{
- x = 1;
- return x;
- }catch(Exception e){
- x = 2;
- return x;
- }finally{
- x = 3;
- }
- }
相信对Java比较熟悉的朋友马上会说出正确答案:正常返回1,异常返回2。我第一次看到这段代码时,对于finally里面的x=3产生了疑惑,不确定最后返回的x是否变成了3,直到从《深入理解Java虚拟机》里面找到了这段代码的字节码,才明白其运行机制。下面是上面这段Java代码的字节码:
[java] view plaincopyprint?
- public int test();
- Code:
- Stack=1, Locals=5, Args_size=1
- 0: iconst_1 //将1写入栈顶
- 1: istore_1 //将栈顶值(1)写入第2个int型本地变量
- 2: iload_1 //将第2<span style="font-family: Arial, Helvetica, sans-serif;">个int型本地变量load到栈顶(Return语句的开始)</span>
- 3: istore 4 //保存栈顶值到<span style="font-family: Arial, Helvetica, sans-serif;">第4个int型本地变量</span>,此时x=1
- 5: iconst_3 //将3写入栈顶(Finally开始)
- 6: istore_1 //将3写入<span style="font-family: Arial, Helvetica, sans-serif;">第2个int型本地变量</span>
- 7: iload 4 //将<span style="font-family: Arial, Helvetica, sans-serif;">第4个int型本地变量的值laod到栈顶</span>
- 9: ireturn //返回栈顶的值
- 10: astore_2
- 11: iconst_2
- 12: istore_1
- 13: iload_1
- 14: istore 4
- 16: iconst_3
- 17: istore_1
- 18: iload 4
- 20: ireturn
- 21: astore_3
- 22: iconst_3
- 23: istore_1
- 24: aload_3
- 25: athrow
Java中Return和Finally执行顺序的实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。