黑马程序员技术交流社区

标题: try语句包含return语句的finally执行情况 [打印本页]

作者: 谷龙强    时间: 2013-6-25 23:37
标题: try语句包含return语句的finally执行情况
本帖最后由 孙百鑫 于 2013-6-27 07:49 编辑

方法中的try{}中如果有return语句,那么这个try对应的finally里面的代码会被执行吗?
作者: 8047107    时间: 2013-6-25 23:46
一定的!
作者: 刘_鑫    时间: 2013-6-25 23:56
finally是一定会执行的

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

因为终止了虚拟机进程


finally会在return之前执行

如果在finally里面有return情况会更复杂
作者: 张承富    时间: 2013-6-25 23:59
finally里面的代码是一定会被执行的,不管你try里面的代码如何,当然那个特殊的情况,就是楼上的说的,我没用过
作者: 王磊    时间: 2013-6-26 00:00

  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的运行情况。
作者: tpsu88    时间: 2013-6-26 00:01
这个是毕老师的例子:
  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结束。
作者: 王靖远    时间: 2013-6-26 01:22
tpsu88 发表于 2013-6-26 00:01
这个是毕老师的例子:只有return,除了捕获异常以外,还会打印finally里面的语句,但是不打印over。
如果写 ...

正解。System.exit(0);才可以阻止finally里的代码运行。
作者: 王广亚    时间: 2013-6-26 09:04
”System.exit(0);才可以阻止finally里的代码运行。”又学到了东西,受教了,好像感觉这个在毕老师的视频里没有讲到,或者我疏忽了。
作者: 郭伟杰    时间: 2013-6-26 12:10
不会             你试一下啊
作者: majunm    时间: 2013-6-26 12:29
只有JVM虚拟机系统退出时--System.exit(0);--  才能阻止finally语句执行!!!! return 尚不能阻止!!
作者: 孙百鑫    时间: 2013-6-27 07:49
楼主您好。我已将您的帖子改成已解决。如果帖子发布长时间没加分。及时联系我。以免漏分的情况发生{:soso_e100:}




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