黑马程序员技术交流社区

标题: 今天晚上在群上讨论的问题 [打印本页]

作者: 李叶    时间: 2011-9-3 01:23
标题: 今天晚上在群上讨论的问题
问题:
try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行
如果执行,那么它会在什么时候被执行,在return前还是后?

===================================================

实验1:[code=java]public class TestFinally {
  public static void main (String [] args) {
    String result = testFinally();
    System.out.println("return = " + result);
  }

  public static String testFinally () {
    String str = null;
    try {
      str = "try";                           //将str的值设置为"return";
      System.out.println("str = " + str);    //打印str的值
      return str;                            //返回str
    } finally {
      str = "finally";                       //将str的值改变为"finally";
      System.out.println("str = " + str);    //打印str的值
    }
  }
}

//程序运行结果为:
str = try
str = finally
return = try[/code]结论:
1、由于finally{}中打印str的值这行代码被执行了,所以跟在return后面的finally{}里的code会执行
2、由于在finally{}中将str的值改变为了"finally",但是方法返回的值仍然是"try"
所以,finally是在return语句执行之后,才改变str的值的
所以,finally执行的时间在return后

===================================================

实验2:[code=java]public class TestFinally {
  public static void main (String [] args) {
    String result = testFinally();
    System.out.println("return = " + result);
  }
       
  public static String testFinally () {
    String str = null;
    try {
      str = "try";                      //将str的值设置为"return";
      System.out.println("str = " + str);  //打印str的值
      return str;                          //返回str
    } finally {
      str = "finally";                     //将str的值修改为"finally";
      System.out.println("str = " + str);  //打印str的值
      return str;                          //返回str(比起代码1来,代码2只多了这1行)
    }
  }
}
//程序运行结果为:
str = try
str = finally
return = finally[/code]结论:
由于实验2中,仅仅在finally{}中多加了1行return语句,方法的返回的值就变为了"finally"
这就说明,如果finally{}中有return语句的话,那么方法就会返回finally{}中执行return语句时返回的值
也就是说,方法最终返回的值是总是最后一个return所返回的值

===================================================

不知道以上的结论是否正确?
作者: 匿名    时间: 2011-9-3 02:08
厉害!!!!!!!!!
作者: 匿名    时间: 2011-9-3 07:19
两点还没睡
作者: 李叶    时间: 2011-9-3 09:53
原帖由 史卫平 于 2011-09-03 07:19 发表 两点还没睡

你7点就起了……
作者: 匿名    时间: 2011-9-3 14:04
呵呵,一般情况下我是晚上睡得越晚,早上就起得越早,默默的透支啊
作者: 匿名    时间: 2011-9-4 09:39
java核心编程有提到过。。。一毛一样的题目




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