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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乖睡觉咯 中级黑马   /  2013-8-20 21:08  /  997 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

finally 在什么情况下的时候是不会执行的呢??  求解释啊??

6 个回复

倒序浏览
虚拟机退出的情况下不会执行
回复 使用道具 举报
对于finally一般是关闭资源或一定会被执行的代码,
在java中只有一种情况,不会被执行到就是在finally前系统退出,
System.exit(0);finally不会被执行到,
return;finally还是会执行到
class Test {

public static void main(String[] args) {
   
   System.out.println(new Test().test());;
}
int test()
{
   try
   {
    return func1();
   }
   finally
   {
    return func2();
   }
}

int func1()
{
   System.out.println("func1");
   return 1;
}
int func2()
{
   System.out.println("func2");
   return 2;
}
}
在java只有一种系统退出finally不会执行到

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
只有当JVM被终止掉时,才不会再执行finally中的语句。
像return,break,这些都不好使,finally都会执行,因为jvm还运行
例如:
  public static void main(String[] args) {
                try {
                        System.out.println(args[0]);
                        System.out.println("I'm nomal");
                        System.exit(0);
                } catch (Exception ex) {
                        System.out.println("I'm exception");
                        System.exit(0);
                } finally {
                        System.out.println("I'm finally.");
                }
        }
}
只有上面这种情况finally不会执行,因为System.exit(0)后,JVM终止了。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
在try catch finally中一直都是会运行最后一步的finally 即是 不管你是代码正常运行或者在执行过程中发生runTime异常都会在finally中执行代码的
一般用法
try{
    conn.Open();//打开数据库
}catch{
    throw Exception(e);//抛异常
}finally{
   conn.Close();//数据库关闭
}

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
楼主,你的问题解决了,请把问题的“未解决”更改为”已解决“!
谢谢合作!
回复 使用道具 举报
finally在try ...catch 执行完毕后一定会执行的。

你说的不用执行,从语法上来说做不到。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马