try....catch...finally

yzj123 2010-02-28 10:01:00
题目:try{}里有一个return 语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候执行,在return前还是return后?
多谢各位!
...全文
203 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
cheung1987 2010-03-06
  • 打赏
  • 举报
回复
引用 21 楼 py330316117 的回复:
我在这里叫下真,只要try中没有像system.exit(0)这样的结束程序的语句,finally都会执行。
哈哈,上面的同志全部要喷饭吧!!!!



正确
Yedy2000 2010-03-02
  • 打赏
  • 举报
回复
冒个泡,可得十分可用分?
soton_dolphin 2010-03-02
  • 打赏
  • 举报
回复
finally总会执行的
polimo 2010-03-02
  • 打赏
  • 举报
回复
基础问题。多看下基础书!
Agile牧 2010-03-02
  • 打赏
  • 举报
回复
引用 3 楼 javaalpha 的回复:
finally 里面的代码不管怎么样都是会被执行的。
Java codepublicstaticvoid main(String[] args)
{
System.out.println(test());
}publicstaticint test()
{try
{
System.out.println(2/1);return0;
}catch (Exception e)
{
e.printStackTrace();
}finally
{
System.out.println("2/0");
}return0;
}
结果:22/00


正解
mirroy 2010-03-02
  • 打赏
  • 举报
回复
java爱好者的免费学习视频、实战视频

下载列表 参见博客

http://user.qzone.qq.com/312311285/blog/1264432325
ArayChou 2010-03-02
  • 打赏
  • 举报
回复
引用 20 楼 weihthchk 的回复:
1. 在finally里面写return是逻辑错误。
2. 先运算try里面的return后边跟的表达式(例如exp1),然后执行finally块,最后返回exp1得到的值。
3. 如果exp1抛出异常,运行相应的catch,然后finally。
4. 如果exp1抛出异常,又没有相应的catch,那么finally,最后继续抛出异常。

可以自行写例子测试。


这个是最佳答案

大家注意第二条,下面的代码似乎返回1,不是2


int a=0;
try{
a=1;
return a;
}
finally{
a = 2;
}



一般,return编译成及其语言会有2个操作,将返回值压入堆栈,然后跳回到调用函数的代码去执行(修改cs寄存器?).(这点学过汇编的同学应该比较清楚)

finally里的代码是这个时候执行,压栈之后,跳回之前。在return之前或之后这2种说法都是错误的
ohuan 2010-03-01
  • 打赏
  • 举报
回复
首先,可以确定 finally 里的语句是一定会执行的。
如果 try 和 finally 里都有 return 的话,那么只会执行 finally 里的 return,不会再去执行 try 里的 return 了。

如:
public static boolean tryFinallyTest(){ 
try{
System.out.println("a");
return false;
}finally{
System.out.println("b");
return true;
}
}

那么,返回的会是
a
b
tryFinallyTest= true

星辰企业 2010-03-01
  • 打赏
  • 举报
回复
会执行 在return前执行! 如果finally里面也有return语句的话,返回的值是return里面返回的!
liguang168 2010-03-01
  • 打赏
  • 举报
回复
越来越多的人学JAVA了。
Miracle1216 2010-03-01
  • 打赏
  • 举报
回复
finally是一定会执行的
gao512008 2010-03-01
  • 打赏
  • 举报
回复
引用 3 楼 javaalpha 的回复:
finally 里面的代码不管怎么样都是会被执行的。
Java codepublicstaticvoid main(String[] args)
{
System.out.println(test());
}publicstaticint test()
{try
{
System.out.println(2/1);return0;
}catch (Exception e)
{
e.printStackTrace();
}finally
{
System.out.println("2/0");
}return0;
}
结果:22/00
很好的例子
wolf521hf 2010-03-01
  • 打赏
  • 举报
回复
这个题目好像在面试中经常会问道的
keeya0416 2010-03-01
  • 打赏
  • 举报
回复
除非强行关闭 JVM ,其他情况 finally 里的语句都会执行
py330316117 2010-03-01
  • 打赏
  • 举报
回复
我在这里叫下真,只要try中没有像system.exit(0)这样的结束程序的语句,finally都会执行。
哈哈,上面的同志全部要喷饭吧!!!!
weihthchk 2010-03-01
  • 打赏
  • 举报
回复
1. 在finally里面写return是逻辑错误。
2. 先运算try里面的return后边跟的表达式(例如exp1),然后执行finally块,最后返回exp1得到的值。
3. 如果exp1抛出异常,运行相应的catch,然后finally。
4. 如果exp1抛出异常,又没有相应的catch,那么finally,最后继续抛出异常。

可以自行写例子测试。
east_java 2010-03-01
  • 打赏
  • 举报
回复
看下这个文章吧、、http://www.java1995.cn/blog/item/82
Z_FEI 2010-03-01
  • 打赏
  • 举报
回复
引用 8 楼 keeya0416 的回复:
除非强行关闭 JVM ,其他情况 finally 里的语句都会执行

学习了
zliuzz 2010-03-01
  • 打赏
  • 举报
回复
引用 8 楼 keeya0416 的回复:
除非强行关闭 JVM ,其他情况 finally 里的语句都会执行


学习了~
sunwxb 2010-03-01
  • 打赏
  • 举报
回复
finally{}
总会被执行的.
加载更多回复(7)

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧