黑马程序员技术交流社区
标题:
为什么finally不能改变return的值呢?
[打印本页]
作者:
heke
时间:
2013-10-29 12:31
标题:
为什么finally不能改变return的值呢?
本帖最后由 heke 于 2013-10-29 21:09 编辑
public class Test5 {
public static void main(String[] args) {
int a = 3;
int b = test(a);
System.out.println(b);
}
private static int test(int a) {
int b = a;
try {
return (b = b + 3);
} catch (Exception e) {
} finally {
b = b * 4;
System.out.println("finally: " + b);
}
return b;
}
}
作者:
heke
时间:
2013-10-29 12:33
虽然执行了finallly的语句,但是return返回结果仍为6
作者:
ヅ飞飞
时间:
2013-10-29 12:41
因为调用test方法时,先执行try{}代码块,return(b=b+3)先执行,方法返回b值,此时相当方法已经调用结束,后面的return语句是执行不到的。finally是一定执行的方法调用后继续执行。
作者:
那得好好想想
时间:
2013-10-29 13:23
本帖最后由 那得好好想想 于 2013-10-29 14:42 编辑
try中的return不是肯定返回的,因为如果有异常,就会捕获,然后执行finally,是这个顺序吧。
那么你finally中又没有return。所以在整个try块外面必须要有一个return,否则系统就会认为你没有返回值,这是一个因果关系,因为没有返回值,所以方法不成立。
那么此时外面这个return的值的作用就是告诉方法,try中我有一个返回结果是成立的,对应的就是第一个return,那么就返回第一个return的值。
再比如有一个空罐子,当方法执行return时,就把数据放到这个罐子里。
这个放的过程就是return,那么对比finally,它只是一个在try中必须要执行的代码块,并没有放入罐子的过程,所以罐子中的数据还是之前return的数据。
以上仅是我个人的理解。仅供参考。
作者:
靓仔
时间:
2013-10-29 16:03
当执行int b=test(a)时,调用方法test,此时返回b=6,执行之后try catch语句结束,但finally一定是要执行的代码,finally的作用:1:finally中定义的通常是:关闭资源代码,因为资源必须释放
2:finally只有一种情况系不会运行。当执行到System.exie(0);finally不会被执行。希望能帮到你把
作者:
帅气的冬瓜
时间:
2013-10-29 17:15
重新了解一些语句,你就会明白,当执行到finally时,是强制执行里面的代码的。相当于结束
作者:
黄炳期
时间:
2013-10-29 17:18
如果问题已经解决,请及时修改主题至“提问结束”
作者:
To
时间:
2013-10-30 00:07
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:
http://bbs.itheima.com/thread-89313-1-1.html
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2