public static void main(String[] args) { int i = 2; try{ if(1==i){ System.out.println("i==1"); } else{ System.out.println("i==其他"); return ; } } catch(Exception e){ e.printStackTrace(); } finally{ System.out.println("不论如何都执行finally"); } }
好有意思的执行过程,加断点试试.请问下第九行中的return最后return到哪了呢?
收藏 (0)分享
微博QQ微信
举报
加载中
0
2015/06/08 14:13
把return改为System.exit(0);效果就又不一样了
评论 (0) 引用此答案 举报
0
2013/01/21 16:53
这个好像是一个面试题,就是问你是return是在finally执行之前还是之后执行,答案是在finally执行之后返回.
评论 (0) 引用此答案 举报
0
2013/01/20 10:44
这只是源码层次的表现形式,可以想象下 编译器编译后将return放到哪里去了
评论 (0) 引用此答案 举报
0
2013/01/19 23:53
http://download.oracle.com/otndocs/jcp/jvm-se7-mr3-approved-oth-JSpec/
评论 (0) 引用此答案 举报
0
2013/01/19 23:29
对于异常处理的部分,每个catch和finally都对应的有自己的代码快。 你这个例子中,程序在执行try和catch的代码之后必须进入finally执行对应的代码,如果中间又return语句,那么也会先进入finally部分执行完毕之后再return(但是如果finally中有return的话,会再finally中直接跳出当前方法并返回)。 虚拟机的规范规定虚拟机的实现是必须这么做的。
具体细节可以参考java虚拟机规范。
评论 (0) 引用此答案 举报
0
2013/01/18 14:03
引用来自“xiangmao”的答案
先执行了finally,再执行的return,return之后程序就结束了。
这个是对的
评论 (0) 引用此答案 举报
0
2013/01/18 12:52
先执行了finally,再执行的return,return之后程序就结束了。
评论 (1) 引用此答案 举报
2013/01/18 14:05
return 语句可以使其从当前方法中退出,返回到调用该方法的语句处,继续程序的执行。我就不明白他为什么执行完了之后又跳到return 所在处呢,干什么去了?
回复 举报
0
2013/01/18 12:18 iPhone
到finally了,没有finally到方法尾结束
评论 (1) 引用此答案 举报
2013/01/18 12:19
你可以加断点试试
回复 举报