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

来源:互联网  时间:2016/7/1 16:50:45

关于网友提出的“ 很简单的try catch finally代码,但返回值搞不懂”问题疑问,本网通过在网上对“ 很简单的try catch finally代码,但返回值搞不懂”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 很简单的try catch finally代码,但返回值搞不懂
描述:

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是什么?
为什么呢?
没想明白。


解决方案1:

这题7楼已经给答案了呀,咋还这么多人不明白呀!!
我再把原因贴出来:
当finally中有return语句的时候,try中的return会被抛弃;当finally中没有return语句时,try中return的值会被保存且被返回。

解决方案2:

1、finally一定执行,会在try块return之前;
2、根据测试,个人认为,jvm遇到return的时候,会在stack区生成一个返回值类型的临时变量,在try块的时候,这个变量值为10,因为有finally,所以先不返回,执行完a=100之后再返回,所以返回的是那个临时变量值;
3、楼主可以继续做测试,在finally后面的return a移到finally里面,结果会变为100,因为,执行到finally的return语句时,jvm会修改之前那个临时变量,最后再把值返回给调用它的方法

解决方案3:

try catch finally,不管是否发生异常,finally模块都要执行。
最后的结果返回10,是因为try中已经把值返回了;
如果去掉try模块中return a,则返回100

解决方案4:

引用 4 楼 yangshuai19880401 的回复:
当执行到getValue()函数的时候,a=0,接下来执行try里面的语句,a=10,return a,这时a==10,因为没有异常,所以不执行catch语句,至于为什么没执行finally是因为有return a这句话,已经跳出函数了,所以最后等于10.OK?

"至于为什么没执行finally是因为有return a这句话,已经跳出函数了,所以最后等于10.OK?
"这句话不对、finally会走的 解决方案5:

try里面的没有异常直接返回10,finally里的也执行了,不过已经返回了

解决方案6:

http://qiang106.iteye.com/blog/254940这里面别人都写Demo测试过了,有借鉴意义。

解决方案7:

finally是一定会执行的,只不过上面的try{}里已经return a,所以之后对a的修改对于getValue()的返回值都不会有影响。

解决方案8:

当执行到getValue()函数的时候,a=0,接下来执行try里面的语句,a=10,return a,这时a==10,因为没有异常,所以不执行catch语句,至于为什么没执行finally是因为有return a这句话,已经跳出函数了,所以最后等于10.OK?

解决方案9:

http://hi.baidu.com/freish/blog/item/9c77bf1126f6f670cb80c41d.html

上一篇关于checkbox插入多条数据
下一篇struts2怎样返回带alert的提示信息?
明星图片
相关文章
《 很简单的try catch finally代码,但返回值搞不懂》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)