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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李叶 黑马帝   /  2011-9-3 01:23  /  1608 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

问题:
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所返回的值

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

不知道以上的结论是否正确?

评分

参与人数 1技术分 +2 收起 理由
admin + 2 精神可嘉!

查看全部评分

5 个回复

正序浏览
黑马网友  发表于 2011-9-4 09:39:19
地板
java核心编程有提到过。。。一毛一样的题目
回复 使用道具 举报
黑马网友  发表于 2011-9-3 14:04:00
报纸
呵呵,一般情况下我是晚上睡得越晚,早上就起得越早,默默的透支啊
回复 使用道具 举报
原帖由 史卫平 于 2011-09-03 07:19 发表 两点还没睡

你7点就起了……
回复 使用道具 举报
黑马网友  发表于 2011-9-3 07:19:26
藤椅
两点还没睡
回复 使用道具 举报
黑马网友  发表于 2011-9-3 02:08:06
沙发
厉害!!!!!!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马