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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qq563426478 中级黑马   /  2015-3-1 20:38  /  1208 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

点评

这个问题我见了四五个人问了~~  发表于 2015-3-2 12:09

11 个回复

正序浏览
无论try{}内怎么return,finally{}中的语句一定会执行
其执行顺序是try执行完,判断是否有异常,有异常执行catch语句,异常处理完成后,注意即使抛出的RuntimeException,也会执行到finally中的语句。
如果没有异常,即使try中return了,那么依旧会执行finally语句。

评分

参与人数 1黑马币 +1 收起 理由
万合天宜 + 1 很给力!

查看全部评分

回复 使用道具 举报
好像是在return之间执行吧
回复 使用道具 举报
准确的说,是在return之间执行:victory:
回复 使用道具 举报
public class Test8 {
        public static void main(String[] args) {
                //调用函数,并打印返回结果
                System.out.println(test());
        }
        //自定义一个测试函数
        public static String test()
        {
                try
                {
                        //呈现正在执行try代码块
                        System.out.println("执行try!");
                        return "false";
                }
                finally
                {
                        //呈现正在执行finally代码
                        System.out.println("执行finally!");
                        //return "true";
                }
        }
}
指定结果:执行try!
                执行finally!
                false
从执行结果中可以得到结论:try中的return语句只在finally之后执行的,此情况只是在finally中没有return语句时,若finally中也有return语句,那么try中return语句将不会被执行,程序将在执行完finally中的return语句时,直接退出。





评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 很给力!

查看全部评分

回复 使用道具 举报
地板这层受教了。
回复 使用道具 举报
没有实践就没有发言权啊,我也动手做试验。
  1. package pre;

  2. public class Final {
  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {

  7.                 String s=finall();
  8.                 System.out.println(s);
  9.         }
  10.        
  11.         public static String finall(){
  12.                 try {
  13.                         System.out.println("函数体");
  14.                         return "sad";
  15.                        
  16.                 }finally{
  17.                        
  18.                         System.out.println("finally");
  19.                 }
  20.         }

  21. }
复制代码


补充下:每个函数都有返回语句(return),并且是在最后一行。

finally.gif (10.78 KB, 下载次数: 0)

finally.gif

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1

查看全部评分

回复 使用道具 举报
在return前执行
回复 使用道具 举报
这个问题挺好,我试了一下,会在return前执行
回复 使用道具 举报
finally的code会执行,在return之后执行。
回复 使用道具 举报
finally{}肯定会执行。只有一种情况能够阻挡它,那就是System.exit(0).(exit中的参数:jvm正常结束用0;非0的都表示不正常结束)

finally执行必须在return前啊。因为一return,函数就结束了。
另外我猜想:return运行前会检查有没有finally代码块的存在。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马