黑马程序员技术交流社区

标题: 在try catch 中遇到的问题 [打印本页]

作者: qq563426478    时间: 2015-3-1 20:38
标题: 在try catch 中遇到的问题
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
作者: sofeel    时间: 2015-3-1 20:47
finally{}肯定会执行。只有一种情况能够阻挡它,那就是System.exit(0).(exit中的参数:jvm正常结束用0;非0的都表示不正常结束)

finally执行必须在return前啊。因为一return,函数就结束了。
另外我猜想:return运行前会检查有没有finally代码块的存在。
作者: 龙行无忌    时间: 2015-3-1 20:48
finally的code会执行,在return之后执行。
作者: shuren2015    时间: 2015-3-1 20:50
这个问题挺好,我试了一下,会在return前执行
作者: 袁丙轩    时间: 2015-3-1 21:04
在return前执行
作者: sofeel    时间: 2015-3-1 21:06
没有实践就没有发言权啊,我也动手做试验。
  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

作者: 笑望长空,逆转    时间: 2015-3-2 12:04
地板这层受教了。
作者: yangruijing    时间: 2015-3-2 21:57
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语句时,直接退出。






作者: Never、saydie    时间: 2015-3-2 22:09
准确的说,是在return之间执行:victory:
作者: 苏安东    时间: 2015-3-2 22:41
好像是在return之间执行吧
作者: 奋斗小青年    时间: 2015-3-2 23:10
无论try{}内怎么return,finally{}中的语句一定会执行
其执行顺序是try执行完,判断是否有异常,有异常执行catch语句,异常处理完成后,注意即使抛出的RuntimeException,也会执行到finally中的语句。
如果没有异常,即使try中return了,那么依旧会执行finally语句。




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