A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 雷云红 初级黑马   /  2012-6-7 18:20  /  2908 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看到很多同学都说finally一定要执行?我给出我的意见:finally不一定执行!!!
不多说先上代码:(这段代码是从一个同学那儿借鉴过来的,先谢。)
try{
  return false;
}finally{
  return ture;
}
很明显,这里的finally就不一定执行了。
此外我们都知道一个在程序运行的时候会出现一个费城可恶的现象:断电。
假如程序执行到try语句,就断电了,finally也不会执行的。

其实我们用finally主要是用在关闭资源。其余几乎不会用到的。


点评

理解确实不怎么完全哦~加油  发表于 2012-6-7 20:29

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 鼓励下,多加强理解~

查看全部评分

7 个回复

倒序浏览
本帖最后由 黑马张扬 于 2012-6-7 18:33 编辑
  1. try
  2. {
  3.         System.exit(0);
  4. }
  5. finally
  6. {
  7.     System.out.println("good");
  8. }
复制代码
这种情况也不会执行!·

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
这样理解不完全对吧,try是为了捕获异常而使用的,而finally是为了不管有无异常发生finally 结构使代码总会执行而使用的。你这样的它的用途就没有意义了。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
finally主要是用来关闭资源的  假如在连接数据库的时候,出现了异常  这个时候它仍然与数据库保持连通状态 ,仍占用着系统资源,这个时候就需要在finally关闭资源
回复 使用道具 举报
呵呵,我说的不是那个,我想说的是那种观念,finally不一定执行。就是要转变finally一点要执行的那种观念,给懂?
地球人都知道“连接数据库的时候,出现了异常  这个时候它仍然与数据库保持连通状态 ,仍占用着系统资源,这个时候就需要在finally关闭资源”,关键在于finally比一定执行就不知道了。{:soso_e141:}
同时对版主表示一下小小不满,都不给分。
回复 使用道具 举报
System.exit(0);  系统退出

finally不执行  只此一家..
回复 使用道具 举报
同学,还需要再学习啊。

我记得,如果在try里面遇到了return,那程序会先看有没有finally语句,先执行了finally,再回到try。

给你写个代码,你一运行就知道了
  1.         public static void main(String[] args)
  2.         {
  3.                 System.out.println(test1());
  4.         }
  5.        
  6.         public static  boolean test1()
  7.         {
  8.                 boolean a = true;
  9.                 try {
  10.                        
  11.                         return a;
  12.                 } finally
  13.                 {
  14.                         a = false;
  15.                         System.out.println("进来finally了");
  16.                         return a;
  17.                        
  18.                 }
  19.         }
复制代码
回复 使用道具 举报
public class testReturn {
public static int test() {
try {
return fun1();
} catch (Exception e) {
} finally {
return fun2();
}
}

public static int fun1() {
System.out.println("fun1被执行了");
System.out.println("fun1的确被执行了,返回么?");
return 1;
}

public static int fun2() {
System.out.println("fun2被执行了");
System.out.println("fun2的确被执行了,返回么?");
return 2;
}

public static void main(String[] args) {
System.out.println(testReturn.test());
}
}
结果:fun1被执行了
fun1的确被执行了,返回么?
fun2被执行了
fun2的确被执行了,返回么?
2

//注意,结果中第二句之后并没有返回值(但此时x的值会被记录)
!程序之后暂时给finally操纵了,如果finally“把握住了机会”
用return返回了,那返回的是现在x的值,如果没把握住,不管它执
行了什么代码,返回的x值还是执行try那个时期记录的。
包(package)

return 之前是会先执行finally的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马