黑马程序员技术交流社区

标题: 关于finally的问题 [打印本页]

作者: 燿陚√揚葳    时间: 2014-6-26 17:44
标题: 关于finally的问题
本帖最后由 燿陚√揚葳 于 2014-6-26 19:19 编辑

finally为最后一定会执行的语句,那么如下
public class Demo {
public static void main(String[] args){
  try{
   return;
  }
  finally{
   System.out.println("ok");
  }
}
}
return不是用来终止方法运行的吗?当执行到了return那么为什么系统还会继续继续执行finally中的语句呢?
还请详细告知一下,谢谢了!

作者: 唤月    时间: 2014-6-26 17:58
finally语句中可以释放一些资源的操作,比如IO流,当你在进行IO操作是,由于发生异常什么的,程序被终止但是资源却还没释放,这就需要用finally还进行关闭了..........
作者: luojunwei1992    时间: 2014-6-26 18:08
try中的return语句调用的函数先于finally中调用的函数执行,也就是说return语句先执行,finally语句后执行,Return并不是让函数马上返回,而是return语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行finally语句后才真正开始返回。
作者: luojunwei1992    时间: 2014-6-26 18:18
简单而形象的说就是方法在顺序化的一直往下走,走着走着,发现了rerurn(但并未执行),它知道它快活不下去了,临死前.他就去找Finally,让Finally把事情做完.举个例子:在jdbc中我们用try中的return返回数据,而让finally关闭数据库
作者: 燿陚√揚葳    时间: 2014-6-26 18:22
luojunwei1992 发表于 2014-6-26 18:18
简单而形象的说就是方法在顺序化的一直往下走,走着走着,发现了rerurn(但并未执行),它知道它快活不下去了,临 ...

恩恩,谢谢你了,我懂了
作者: 马到成功2014    时间: 2014-6-26 18:47
finally用于关闭资源,和try catch 并用 为了就是发生异常 还是能关闭资源的说
作者: 798    时间: 2014-6-26 20:21
不仅return如此,break,throw  等遇见finally也一定是先执行finally代码块,只有一种情况不会执行finally,
当遇见System.exit(0).




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2