Java中的Finally

wangxmwxm 2004-04-16 10:06:50
Class method(){
try{
......
return Calss;
}catch(E..){
.......
return null;
}finally{
......
}
}
我测试了,在方法中即使用了“Return”语句,Finally跨块也执行,这是为什么呢?又是怎么执行的呢?高手多多给出见解。
...全文
142 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnham 2004-09-23
  • 打赏
  • 举报
回复
mark
wangxmwxm 2004-04-16
  • 打赏
  • 举报
回复
to: zjpangxie(又胡了)
如果你说的成立--“finally中的代码会在try中的return之前被执行”,那我就能想通了,我一直都没有找到这方面的资料。
那位老兄能提供这方面的资料,我表示万分感谢!!!如果不方便的话也可发到我邮箱Wangxmwxm@163.com
GaryZhu 2004-04-16
  • 打赏
  • 举报
回复
原因在于finally中的代码会在try中的return之前被执行,如果finally有return就直接返回了,执行不到try块中的return。

GaryZhu 2004-04-16
  • 打赏
  • 举报
回复
如果在finally块中有一条return语句返回一个值,那么这个值将被返回,前面任何的return语句返回的值都无用。
wangxmwxm 2004-04-16
  • 打赏
  • 举报
回复
那Try和Finally中的两个Return有什么关系呢?
try{
return Class;
}finally{
return Class;
}
kingren 2004-04-16
  • 打赏
  • 举报
回复
在try块的return执行之前会先执行finally中的代码
yongfans 2004-04-16
  • 打赏
  • 举报
回复
你可以把整个程序想象成一个主进程,其中有多个线程,
当执行完函数调用后他进行返回,也就是final的前面,然后进行最后的处理,
最后回收,程序结束
大体形状是这样:
|fun()调用
|| | | /
|/
|返回
|最后执行final

brinker 2004-04-16
  • 打赏
  • 举报
回复
我也想不通~
wangxmwxm 2004-04-16
  • 打赏
  • 举报
回复
OnlyLikeJava(甜咖啡) and cxb1004(天地笑) :
我的想法是:return是打破流程,finally一般都作为释放资源的我也知道,但作为一个方法或函数,它应该只有一个出口,既然在Try中有Return也执行了,那么应该就打破流程返回了,但还有Finally要执行,这就是说在打破流程以后方法或函数里面的东东,这就有点让我想不通
wangxmwxm 2004-04-16
  • 打赏
  • 举报
回复
像0xCafeBabe(咖啡宝贝~找不到工作郁闷死) 说的
1
try{
return 1;
}finally{
return 2;
}
我测试了,实际返回为“return 2”,那"return 1"等于是没有了,大家怎么说?

cxb1004 2004-04-16
  • 打赏
  • 举报
回复
finally在try-catch-finally中是可以有也可以无的,最重要的是它能够保证一个函数无论出错与否,都有一些函数能够得到执行,包括释放资源、返回值等等。通常用来释放一些大的资源。
return 只是在流程方面结束函数功能,而不是在构架方面。
0xCafeBabe 2004-04-16
  • 打赏
  • 举报
回复
还有更复杂的情况呢
1
try{
return 1;
}finally{
return 2;
}

2
try{
int i=1;
return i;
}finally{
i=2;
}

3
for(...){
try{
return 1;
}finally{
break;
}
}
return 2;
zijibense 2004-04-16
  • 打赏
  • 举报
回复
finally块是无论如何都会执行的
jinbuquan 2004-04-16
  • 打赏
  • 举报
回复
当然执行了,要不然还要final干什么啊。
OnlyLikeJava 2004-04-16
  • 打赏
  • 举报
回复
finally块是无论如何都会执行的,而且我觉得finally块最大的用处就是释放掉一些资源,所以说假如你在try块中返回,程序又不执行finally块那你说finally块又有什么用呢?那干脆就不要来个finally块好了。
FreeMagic 2004-04-16
  • 打赏
  • 举报
回复
是这样的。
thumb3344 2004-04-16
  • 打赏
  • 举报
回复
学习
wangxmwxm 2004-04-16
  • 打赏
  • 举报
回复
我是说Try里的Return和Finally的关系
Dongluo 2004-04-16
  • 打赏
  • 举报
回复
try{
//只要你的代碼執行到這裡就一定要執行finally代碼塊.
}catch(){
}..
finally{
}
wangxmwxm 2004-04-16
  • 打赏
  • 举报
回复
那我还得买本书了?
那位老兄看过,或研究过就解释解释
加载更多回复(5)

62,623

社区成员

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

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