黑马程序员技术交流社区

标题: finally执行问题 [打印本页]

作者: 付左军    时间: 2012-5-13 23:23
标题: finally执行问题
如果try{}语句中有return,finally什么时候被执行
作者: 云惟桉    时间: 2012-5-14 00:36
finally一定会在try语句的return之前被执行。
但是需要注意的一点事,finally对局部变量进行修改,return的时候返回的依旧是try语句里的执行值
而不是finally语句的修改值。

这个问题之前没注意到,楼主可以关注这个帖子,问题问的角度很特别,引人深思。
http://bbs.itheima.com/forum.php ... amp;page=1#pid78651
希望楼主可以从中有所收获!

作者: 林豪    时间: 2012-5-14 00:47
finally是绝对会执行的语句,就算前面有return,或者已经出现异常了,他都会执行,不过除了System.exit(0);不执行,因为这是退出虚拟机命令
finally一般用于io流去关闭开启后的流
作者: It's_Zero    时间: 2012-5-14 11:47
  1. public class TryCatch {
  2.         public static void main(String[] args){
  3.                 try {
  4.                         System.out.println("1");
  5.                 } catch (Exception e) {//没有异常抛出  不执行
  6.                         System.out.println(2);
  7.                 }finally{
  8.                         System.out.println(3);
  9.                 }
  10.         }
  11. }
复制代码
输出 1 和 3
  1. public class TryCatch {
  2.         public static void main(String[] args){
  3.                 try {
  4.                         System.out.println(1/0);//除数不能为0
  5.                 } catch (Exception e) {//抛出异常  catch代码块运行
  6.                         System.out.println(2);
  7.                 }finally{
  8.                         System.out.println(3);
  9.                 }
  10.         }
  11. }
复制代码
输出 2和 3
所以 finally 是不管前面try{}里面和cathc{}里面是否运行 finally{}都会运行

作者: 于陈    时间: 2012-5-14 12:17
try{}finally{}给我们提供了一个“保证某个动作必然执行”的机会。

一个try-finally结构,只要try块开始执行了,finally块里面的代码保证执行一次并且只有一次。
打个比方,就象你上厕所,只要你一旦开始拉了,我们保证无论如何,是拉稀了也好,放屁了也罢,最终你肯定是擦了屁股走出卫生间。
应用try-finally,我们可以在异常满天飞的程序里保证我们的关键资源被按时正确清理。一个最常见的应用就是jdbc的Connection, Statement, ResultSet等。

这是前天我回答另一个问这个问题的答案,
参考下http://bbs.itheima.com/forum.php ... amp;page=1#pid80249
作者: It's_Zero    时间: 2012-5-14 12:59
于陈 发表于 2012-5-14 12:17
这是前天我回答另一个问这个问题的答案,
参考下http://bbs.itheima.com/forum.php?mod=viewthread&tid=14 ...

.........................
作者: 韩新凯    时间: 2012-5-14 15:52
finally总会执行,除非System.exit(0);




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