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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谷龙强 中级黑马   /  2013-6-25 23:37  /  1832 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙百鑫 于 2013-6-27 07:49 编辑

方法中的try{}中如果有return语句,那么这个try对应的finally里面的代码会被执行吗?

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 新人,鼓励下

查看全部评分

10 个回复

倒序浏览
一定的!
回复 使用道具 举报
finally是一定会执行的

只有代码中有system.exit() 这一种情况 才不会执行finally

因为终止了虚拟机进程


finally会在return之前执行

如果在finally里面有return情况会更复杂

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
finally里面的代码是一定会被执行的,不管你try里面的代码如何,当然那个特殊的情况,就是楼上的说的,我没用过
回复 使用道具 举报

  1. public class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int i = test();
  6.                 System.out.println(i);
  7.         }
  8.        
  9.         public static int test()
  10.         {
  11.                 int x = 0;
  12.                 try
  13.                 {
  14.                         x = 1;
  15.                         return x;
  16.                 }
  17.                 catch(Exception e)
  18.                 {
  19.                        
  20.                 }
  21.                 finally
  22.                 {
  23.                         System.out.println("finally执行到了");
  24.                         return x+1;//这个注释掉的时候,return 0不注释
  25.                 }
  26.                 //return 0;
  27.         }
  28. }
复制代码
这是我在学return和finally时,自己写的一个代码,根据结果能看出来finally和return的运行情况。
回复 使用道具 举报
这个是毕老师的例子:
  1. class  ExceptionDemo5
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Demo d = new Demo();

  6.                 try
  7.                 {
  8.                         int x = d.div(4,-1);
  9.                         System.out.println("x="+x);

  10.                 }
  11.                 catch (FuShuException e)
  12.                 {
  13.                         System.out.println(e.toString());
  14.                         return;
  15.                         //System.exit(0);//系统,退出。jvm结束。
  16.                 }
  17.                 finally
  18.                 {
  19.                         System.out.println("finally");//finally中存放的是一定会被执行的代码。
  20.                 }


  21.                 System.out.println("over");
  22.         }
  23. }
复制代码
只有return,除了捕获异常以外,还会打印finally里面的语句,但是不打印over。
如果写System.exit(0);  finally里面就不会执行! 系统,退出。jvm结束。

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
tpsu88 发表于 2013-6-26 00:01
这个是毕老师的例子:只有return,除了捕获异常以外,还会打印finally里面的语句,但是不打印over。
如果写 ...

正解。System.exit(0);才可以阻止finally里的代码运行。
回复 使用道具 举报
”System.exit(0);才可以阻止finally里的代码运行。”又学到了东西,受教了,好像感觉这个在毕老师的视频里没有讲到,或者我疏忽了。
回复 使用道具 举报
不会             你试一下啊
回复 使用道具 举报
只有JVM虚拟机系统退出时--System.exit(0);--  才能阻止finally语句执行!!!! return 尚不能阻止!!
回复 使用道具 举报
楼主您好。我已将您的帖子改成已解决。如果帖子发布长时间没加分。及时联系我。以免漏分的情况发生{:soso_e100:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马