黑马程序员技术交流社区

标题: 证明return后面有finally,谁先执行,求大神解析 [打印本页]

作者: 陈培果    时间: 2014-5-9 22:39
标题: 证明return后面有finally,谁先执行,求大神解析
本帖最后由 陈培果 于 2014-5-10 08:54 编辑
  1. public class Test6 {

  2.         public static void main(String[] args) {
  3.                 System.out.println(test());
  4.         }

  5.         public static String test() {
  6.                 String x = "try";
  7.                 try {
  8.                         return x;

  9.                 } finally {
  10.                         x = "finally";
  11.                 }
  12.         }

  13. }
复制代码



作者: skill20    时间: 2014-5-9 22:55
finally代码是一定会执行的代码。
System.exit(0); //退出jvm,只有这种情况finally不执行。
作者: 陈培果    时间: 2014-5-9 22:57
skill20 发表于 2014-5-9 22:55
finally代码是一定会执行的代码。
System.exit(0); //退出jvm,只有这种情况finally不执行。 ...

我知道fillally会一定执行,但是我想知道return和finally谁先执行。
作者: 展展    时间: 2014-5-10 00:44
教你一个方法,在一个有返回值的函数里测试,例如return个字符串,然后在主函数里打印他,在之前的函数里finally{
Thread.sleep(3000);
System.out.println(finally Run);


酱紫就知道了
作者: 蓝雨星空    时间: 2014-5-10 08:49
过程如下:

return语句运行 -->  结果被临时保存 --> finally语句执行  -->  临时保存的结果返回给函数调用者

所以finally语句是无法影响到return语句中返回的结果的。
作者: 陈培果    时间: 2014-5-10 08:52
蓝雨星空 发表于 2014-5-10 08:49
过程如下:

return语句运行 -->  结果被临时保存 --> finally语句执行  -->  临时保存的结果返回给函数调 ...

哦哦,这样的啊,也就是说人return先运行是吧。
谢谢
作者: Kael    时间: 2014-5-10 12:55
除非在try块、catch块中调用了退出虚拟机的方法,否则不管在try、catch块中执行什么样的代码,出现什么样的情况,异常处理的finally块总会被执行。




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