很简单的try catch finally代码,但返回值搞不懂

tianshi1017 2011-08-24 09:03:38
public class Test {
public static void main(String[] args) {
int b = getValue();
System.out.println(b);

}

private static int getValue(){
int a =0;
try{
a = 10;
return a;
}catch (Exception ex){

}finally{
a=100;
}
return a;
}
}

输出的返回值b是什么?
为什么呢?
没想明白。
...全文
231 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
_了凡_ 2011-08-26
  • 打赏
  • 举报
回复
还是7楼的好使。
tianshi1017 2011-08-26
  • 打赏
  • 举报
回复
答案都很好很强大
结贴给分
NewMoons 2011-08-24
  • 打赏
  • 举报
回复
虽然7楼给出了答案,但我还是认为finally这种设计还是含有 bad smell的。
希望oracle可以考虑改善一下。
zhujiazhi 2011-08-24
  • 打赏
  • 举报
回复
是10,
这个不光跟try catch finally有关,而且跟堆栈有一些关系的
hushou726 2011-08-24
  • 打赏
  • 举报
回复
finally块是一定会执行的~! 而且是在return之前。所以~~!!
pjg1989 2011-08-24
  • 打赏
  • 举报
回复
肯定是10塞...如果没异常的话,try{}中已经把值返回了,后边的修改不起作用
沐逸_Rock 2011-08-24
  • 打赏
  • 举报
回复
finally函数是必须执行的代码段 所以结果为100
keaixiaozhu7688 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yangshuai19880401 的回复:]
当执行到getValue()函数的时候,a=0,接下来执行try里面的语句,a=10,return a,这时a==10,因为没有异常,所以不执行catch语句,至于为什么没执行finally是因为有return a这句话,已经跳出函数了,所以最后等于10.OK?
[/Quote]
"至于为什么没执行finally是因为有return a这句话,已经跳出函数了,所以最后等于10.OK?
"这句话不对、finally会走的
坐观垂钓者 2011-08-24
  • 打赏
  • 举报
回复
try里面的没有异常直接返回10,finally里的也执行了,不过已经返回了
chuaizicai 2011-08-24
  • 打赏
  • 举报
回复
try里面的没有异常直接返回10,finally里的也执行了,不过已经返回了
飓风zj 2011-08-24
  • 打赏
  • 举报
回复
很诡异这个 呵呵 一般面试会出这变态的题目
Luciferoffans 2011-08-24
  • 打赏
  • 举报
回复
http://qiang106.iteye.com/blog/254940这里面别人都写Demo测试过了,有借鉴意义。
liuzhengkang 2011-08-24
  • 打赏
  • 举报
回复
finally是一定会执行的,只不过上面的try{}里已经return a,所以之后对a的修改对于getValue()的返回值都不会有影响。
yangshuai19880401 2011-08-24
  • 打赏
  • 举报
回复
当执行到getValue()函数的时候,a=0,接下来执行try里面的语句,a=10,return a,这时a==10,因为没有异常,所以不执行catch语句,至于为什么没执行finally是因为有return a这句话,已经跳出函数了,所以最后等于10.OK?
heweiAndPippo 2011-08-24
  • 打赏
  • 举报
回复
自己了解一下try catch finally的执行顺序吧。
原则是先执行return 再finally 可以自己debug一下啊
亲努力啊 2011-08-24
  • 打赏
  • 举报
回复
finally是一定会执行的在返回前
亲努力啊 2011-08-24
  • 打赏
  • 举报
回复
100
gmogle 2011-08-24
  • 打赏
  • 举报
回复
这题7楼已经给答案了呀,咋还这么多人不明白呀!!

我再把原因贴出来:

当finally中有return语句的时候,try中的return会被抛弃;当finally中没有return语句时,try中return的值会被保存且被返回。
一蚊惊人小号 2011-08-24
  • 打赏
  • 举报
回复
1、finally一定执行,会在try块return之前;

2、根据测试,个人认为,jvm遇到return的时候,会在stack区生成一个返回值类型的临时变量,在try块的时候,这个变量值为10,因为有finally,所以先不返回,执行完a=100之后再返回,所以返回的是那个临时变量值;

3、楼主可以继续做测试,在finally后面的return a移到finally里面,结果会变为100,因为,执行到finally的return语句时,jvm会修改之前那个临时变量,最后再把值返回给调用它的方法
加载更多回复(3)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧