Java中的Finally finally块是无论如何都会执行的,而且我觉得finally块最大的用处就是释放掉一些资源,所以说假如你在try块中返回,程序又不执行finally块那你说finally块又有什么用呢?那干脆就不要来个finally块好了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 当然执行了,要不然还要final干什么啊。 finally块是无论如何都会执行的 还有更复杂的情况呢1try{ return 1;}finally{ return 2;}2 try{ int i=1; return i;}finally{ i=2;}3for(...){ try{ return 1; }finally{ break; }}return 2; finally在try-catch-finally中是可以有也可以无的,最重要的是它能够保证一个函数无论出错与否,都有一些函数能够得到执行,包括释放资源、返回值等等。通常用来释放一些大的资源。return 只是在流程方面结束函数功能,而不是在构架方面。 像0xCafeBabe(咖啡宝贝~找不到工作郁闷死) 说的1try{ return 1;}finally{ return 2;}我测试了,实际返回为“return 2”,那"return 1"等于是没有了,大家怎么说? OnlyLikeJava(甜咖啡) and cxb1004(天地笑) :我的想法是:return是打破流程,finally一般都作为释放资源的我也知道,但作为一个方法或函数,它应该只有一个出口,既然在Try中有Return也执行了,那么应该就打破流程返回了,但还有Finally要执行,这就是说在打破流程以后方法或函数里面的东东,这就有点让我想不通 你可以把整个程序想象成一个主进程,其中有多个线程,当执行完函数调用后他进行返回,也就是final的前面,然后进行最后的处理,最后回收,程序结束大体形状是这样:|fun()调用|| | | /|/|返回|最后执行final 在try块的return执行之前会先执行finally中的代码 那Try和Finally中的两个Return有什么关系呢?try{ return Class;}finally{ return Class;} 如果在finally块中有一条return语句返回一个值,那么这个值将被返回,前面任何的return语句返回的值都无用。 原因在于finally中的代码会在try中的return之前被执行,如果finally有return就直接返回了,执行不到try块中的return。 to: zjpangxie(又胡了)如果你说的成立--“finally中的代码会在try中的return之前被执行”,那我就能想通了,我一直都没有找到这方面的资料。那位老兄能提供这方面的资料,我表示万分感谢!!!如果不方便的话也可发到我邮箱[email protected] 这方面的资料指什么?java涉及的东西太多,没有资料是可以面面俱到的,只能靠平时的积累。 我是指Try和Finally之间的关系的资料。不过你说得也对 我觉得大家还是不要在这里胡乱的猜想了,要想真正理解return和finally的含义,还是去看看jvm的工作机制以及他们所对应的字节码的含义,了解了底层的机制,很多问题就迎刃而接了。 推荐一本书《inside java virtual machine》,中文版叫做《深入Java虚拟机》 finally块是无论如何都会执行的 try{ //只要你的代碼執行到這裡就一定要執行finally代碼塊.}catch(){}..finally{} 我是说Try里的Return和Finally的关系 请问一下 为啥有一些pdf转换成swf文件 适用flexpaper不能显示啊? import中出现问题 问一道特简单的问题。 我这个算不算是算法?我感觉好龌龊哦! 关于javascript的问题,请高手指教! servlet 调用一个applet IO读写流的一个乱码问题 内部类的反编译,有谁会? 关于JBuilder6设置问题 HttpURLConnection超时处理 求聊天室的流方式实现方法 请高人指点:迷茫中。。。。。。。。。。。。。。。。。。。。。
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;
return 只是在流程方面结束函数功能,而不是在构架方面。
1
try{
return 1;
}finally{
return 2;
}
我测试了,实际返回为“return 2”,那"return 1"等于是没有了,大家怎么说?
我的想法是:return是打破流程,finally一般都作为释放资源的我也知道,但作为一个方法或函数,它应该只有一个出口,既然在Try中有Return也执行了,那么应该就打破流程返回了,但还有Finally要执行,这就是说在打破流程以后方法或函数里面的东东,这就有点让我想不通
当执行完函数调用后他进行返回,也就是final的前面,然后进行最后的处理,
最后回收,程序结束
大体形状是这样:
|fun()调用
|| | | /
|/
|返回
|最后执行final
try{
return Class;
}finally{
return Class;
}
如果你说的成立--“finally中的代码会在try中的return之前被执行”,那我就能想通了,我一直都没有找到这方面的资料。
那位老兄能提供这方面的资料,我表示万分感谢!!!如果不方便的话也可发到我邮箱[email protected]
要想真正理解return和finally的含义,还是
去看看jvm的工作机制以及他们所对应的字节码
的含义,了解了底层的机制,很多问题就迎刃而接了。
//只要你的代碼執行到這裡就一定要執行finally代碼塊.
}catch(){
}..
finally{
}