+ -
当前位置:首页 → 问答吧 → try catch finally执行的疑问

try catch finally执行的疑问

时间:2011-10-09

来源:互联网

public class TestTry {
public static void main(String[] args) {
System.out.println(test());//为什么打印 1
}

private static int test()
{
int i = 1;
try {
return i;
} catch (Exception e) {


}
finally
{
i++;
}
return 0;
}
}

作者: jtchan   发布时间: 2011-10-09

非常简单,因为你定义的test方法 try语句里面执行i=1之后直接就return i这样写就会不执行下面的任何语句,直接退出test方法执行并返回当前的i值,肯定打印输出是1

return语句的作用你体会下

作者: ioe_gaoyong   发布时间: 2011-10-09

楼上说的对,受教了。幸亏没有异常,不然就是0了!

作者: ggg957432   发布时间: 2011-10-09

return语句放在try块里面,先于finally执行,还没等到finally执行,就已经退出这个方法了。
我建议一般不要把return 放在finally里面,因为与finally一起用的时候会造成语义混乱,不太清晰,程序不容易维护。

作者: stonefeng   发布时间: 2011-10-09

引用楼主 jtchan 的回复:
public class TestTry {
public static void main(String[] args) {
System.out.println(test());//为什么打印 1
}

private static int test()
{
int i = 1;
try {
return i;
} catch (Exception e) {


}
……


i++;还是执行了。可以断点查看得到。

作者: jtchan   发布时间: 2011-10-09

#1楼 说的很对,你需要先了解一下return的用法

作者: wuhuipengwhp   发布时间: 2011-10-09

嗯,但由于i是声明在方法里面的自动变量,在i++之后就会被丢弃,所以i++实际上浪费了计算资源。还是建议不要这样写了。

作者: stonefeng   发布时间: 2011-10-09

1.不管出没出现异常,finally块中的语句都会执行;
2.当try或catch块中有return语句时,finally块中的语句仍会执行;
3.finally块中的语句是在函数返回前执行的,但函数返回值是在finally块中语句执行前确定的;
4.finally块中不能包含return语句。

 楼主可以自己敲下代码验证下、顺便自己理解下。

作者: huangchenliang   发布时间: 2011-10-09

遇到return语句程序就会退出,不再执行下面的代码,作用类似于break

作者: fuwenhai   发布时间: 2011-10-10

这里讨论过

作者: gukuitian   发布时间: 2011-10-10

return作用 结束方法 返回值

作者: xflr123   发布时间: 2011-10-10

return语句执行了,finally语句始终执行

作者: zy609398738   发布时间: 2011-10-10

这个问题以前也有个帖子问过,try里面有return会先返回值然后再执行finally语句

作者: huang_1106   发布时间: 2011-10-10

热门下载

更多