黑马程序员技术交流社区
标题:
关于try,finally的小问题
[打印本页]
作者:
一碗小米周
时间:
2014-5-29 23:12
标题:
关于try,finally的小问题
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(new Test().test());;
}
static int test()
{
int x = 1;
try
{
return x;
}
finally
{
++x;
}
}
}
这里的返回结果为什么是1呢?求解。谢谢
作者:
没壳的蜗牛
时间:
2014-5-30 00:06
你只在try中返回,并没有在finally代码块中返回,所以返回的当然是1啦!将你代码稍该了一下输出就是2了。
package cn.liangfan.learningProblems;
public class TestDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(new TestDemo2().test());;
}
public static int test()
{
int x = 1;
try
{
//return x;
}
finally
{
return ++x;
}
}
}
复制代码
作者:
帅哥哥
时间:
2014-5-30 01:25
我觉着吧,try中执行到了return,然后返回,虽然finally中一定执行,但是是在return之后执行的,你可以在finally中加一句 System.out.println(x); 会看到打印了2的~~~
作者:
★魔_➩τ咒
时间:
2014-5-30 01:29
我也觉得很迷茫
作者:
张百振
时间:
2014-5-30 01:36
严格来说,在finally的return同时存在的情况下,finally代码里边是在两次return之间执行的,
第一次:当代码看到return的时候,返回路径已经生成,也就是这个时候返回的路径上不再是单单返回某一个变量了,而是一个具体的值,此时路径已经生成
但是:生成返回路径的一瞬间,系统又看到了finally,所以又去执行finally中的代码,此时,在finally中给变量赋值仅仅是变量值的改变,并不影响已经生成的返回的那个常量值
第二次:当执行完finally代码之后,系统会将之前生成的返回路径的那个常量值做返回操作
所以呢,finally语句是在两次return之间执行的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2