黑马程序员技术交流社区

标题: try {}里有一个return语句 finally {}里的code会不会被执行 [打印本页]

作者: Treasureと情    时间: 2012-2-28 12:23
标题: try {}里有一个return语句 finally {}里的code会不会被执行
如果try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行
作者: 马胜平    时间: 2012-2-28 12:25
这类问题论坛里回答好多次了,可以找到,还有实例代码
作者: 冯兵兵    时间: 2012-2-28 12:35
finally {}里的code只在一种情况下不会被执行,那就是return语句,因为程序已经结束了。
作者: djx900    时间: 2012-2-28 13:40
只有 exit 的情况 不会 执行 finally 里的代码。 只要虚拟机在运行 就能运行到finally。是不是还一种情况?~?~?~
作者: 胡军喜    时间: 2012-2-28 15:00
不论不出什么情况,finally里的语句,像你说的这种情况,之前我看过类似的问题,说是reutrn和finally都会被执行,至于执行的顺序不能确定。
作者: 雷楚光    时间: 2012-2-28 15:24
抛出异常也是return的一种,所以finally是会被执行。除非在还没执行到finally虚拟机就关闭了。
作者: 陈斌    时间: 2012-2-28 17:01
肯定执行了
你在finally里加一条输出语句你就知道了
但结果为什么会是2呢?
在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。
在转去之前,try中先把要返回的结果存放到不同于a的局部变量中去,执行完finally之后,在从中取出返回结果,
因此,即使finally中对变量a进行了改变,但是不会影响返回结果。
它应该使用栈保存返回值。
作者: 佟都    时间: 2012-2-28 19:22
本帖最后由 tongdu_simon 于 2012-2-28 19:23 编辑

可以自己写个测试代码,试试就知道了
  1. class Test
  2. {       
  3.   public static void main(String[] args)
  4.         {
  5.      try
  6.      {
  7.              System.out.println("TRY...");
  8.              throw new Exception();
  9.      }
  10.      catch(Exception e){
  11.              System.out.println("CATCH...");
  12.              return;
  13.      }
  14.      finally
  15.      {
  16.              System.out.println("FIN...");
  17.      }
  18.    }
  19. }
复制代码
运行结果:


另外可参考:
传智播客_Java培训_毕向东_Java基础[04-继承下].pdf





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