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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如果try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行

7 个回复

倒序浏览
这类问题论坛里回答好多次了,可以找到,还有实例代码
回复 使用道具 举报
finally {}里的code只在一种情况下不会被执行,那就是return语句,因为程序已经结束了。
回复 使用道具 举报
只有 exit 的情况 不会 执行 finally 里的代码。 只要虚拟机在运行 就能运行到finally。是不是还一种情况?~?~?~
回复 使用道具 举报
不论不出什么情况,finally里的语句,像你说的这种情况,之前我看过类似的问题,说是reutrn和finally都会被执行,至于执行的顺序不能确定。
回复 使用道具 举报
抛出异常也是return的一种,所以finally是会被执行。除非在还没执行到finally虚拟机就关闭了。
回复 使用道具 举报
佟都 中级黑马 2012-2-28 19:22:15
7#
本帖最后由 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
回复 使用道具 举报
陈斌 中级黑马 2012-2-28 17:01:51
8#
肯定执行了
你在finally里加一条输出语句你就知道了
但结果为什么会是2呢?
在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。
在转去之前,try中先把要返回的结果存放到不同于a的局部变量中去,执行完finally之后,在从中取出返回结果,
因此,即使finally中对变量a进行了改变,但是不会影响返回结果。
它应该使用栈保存返回值。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马