社区
Java SE
帖子详情
Java中的Finally
wangxmwxm
2004-04-16 10:06:50
Class method(){
try{
......
return Calss;
}catch(E..){
.......
return null;
}finally{
......
}
}
我测试了,在方法中即使用了“Return”语句,Finally跨块也执行,这是为什么呢?又是怎么执行的呢?高手多多给出见解。
...全文
142
25
打赏
收藏
Java中的Finally
Class method(){ try{ ...... return Calss; }catch(E..){ ....... return null; }finally{ ...... } } 我测试了,在方法中即使用了“Return”语句,Finally跨块也执行,这是为什么呢?又是怎么执行的呢?高手多多给出见解。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
java
学习笔记总结
自己几个月的学习总结,一些解决问题的办法,很实用,希望对大家有所帮助!
看了你就掌握---------
JAVA
中
final
ly
语句块的详解!!!!!
关于
JAVA
中
final
ly
语句块的详解 目录关于
JAVA
中
final
ly
语句块的详解前言一、
final
ly
语句块的特点及应用场景二、
final
ly
语句块在任何情况一定会执行吗?三、
final
ly
和
final
的区别四、
final
ly
常见踩坑面试题目总结 前言 相信同学们学习到面向对象的异常处理
中
应该会踩到
final
ly
语句块这个坑
中
,本篇博文通过各种案例帮你如何避免踩坑,踩雷,让你对异常处理的学习更加透彻,
final
ly
语句块掌握的更加扎实! 一、
final
ly
语句块的特点及应用场景 在进行异常处理时,f
Java
中
final
ly
和return的执行顺序
Java
中
final
ly
和return语句执行顺序
Java
中
final
ly
代码块的内容是否一定执行呢?
Java
中
final
ly
代码块的内容是否一定被执行呢?
java
中
final
ly
用法_
java
中
的
final
ly
用法总结
清单 1 说明
final
ly
语句块在 try 语句块
中
的 return 语句之前执行。我们再来看另一个例子(清单 2)。清单 2.清单 2 的执行结果为:清单 2 说明了
final
ly
语句块在 catch 语句块
中
的 return 语句之前执行。从上面的清单 1 和清单 2,我们可以看出,其实
final
ly
语句块是在 try 或者 catch
中
的 return 语句之前执行的。更加一...
Java SE
62,623
社区成员
307,257
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章