黑马程序员技术交流社区
标题:
try、finally中return语句返回值问题
[打印本页]
作者:
Heart
时间:
2013-6-18 10:05
标题:
try、finally中return语句返回值问题
public class Test
{
public static void main(String args[])
{
Test t = new Test();
int b = t.get();
System.out.println(b);
}
public int get()
{
try
{
return 0 ;
}
finally
{
return 5 ;
}
}
}
复制代码
请问上面这段代码返回的是0,还是5?为什么?请具体分析一下
作者:
沐有鱼丸
时间:
2013-6-18 10:35
返回值是5,测试函数:
public class TestTry {
public static void main(String[] args) {
TestTry t = new TestTry();
System.out.println(t.test());
}
@SuppressWarnings("finally")
public int test(){
try{
return function1();
}finally{
return function2();
}
}
public int function1(){
System.out.println("function1执行");
return 1;
}
public int function2(){
System.out.println("function2执行");
return 2;
}
}
执行结果:
function1执行
function2执行
2
结论:finally{}中的语句在try{}之后执行,try中的return语句得到值1,此时并不会让函数立刻返回,而是把1这个值存到函数栈中,然后执行finally{},此时得到值2,并返回函数。
作者:
Renica
时间:
2013-6-18 10:48
返回的是5,如一楼所说try{}finally{}采用的是栈的思想。
作者:
吕祥艺
时间:
2013-6-18 11:51
不管try块、catch块中是否有return语句,finally块都会执行.
而且如果finally 中有return 语句j就会覆盖前面的return语句.....
所以结果是5... 还要最好不要在try catch finally 中写return 语句....
作者:
月时微
时间:
2013-6-18 12:08
在try结构中,虽然使用了return语句强制函数返回,不再往下执行,但实现上finally中的还是执行了。但除了finally外的其它语句不再被执行。
所以返回值是5;
作者:
shang1jk
时间:
2013-6-18 12:14
返回5.
try块中的return 0;语句并不会马上返回给调用者, 而是将返回值0先存入一个内存空间, 等待finally块执行完后才返回给调用者.
而楼主说的这种情况下, 在finally块中的return 5;处直接就返回给调用者了, 然后该方法的执行就算结束了.
连finally块都不一定执行完, 自然不会再返回try块中的0了.
作者:
袁梦希
时间:
2013-6-18 13:08
Renica 发表于 2013-6-18 10:48
返回的是5,如一楼所说try{}finally{}采用的是栈的思想。
尽量详细的描述问题
作者:
袁梦希
时间:
2013-6-18 13:09
加油楼主
作者:
孙百鑫
时间:
2013-6-24 23:52
楼主您好,由于帖子长时间没有动态,我已经讲帖子改成已解决了,如有问题,可以私聊我。{:soso_e100:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2