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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李工 于 2015-8-17 20:51 编辑

* 第7题: 用代码证明,在try中写了return,后面又写了finally,是先执行return还是先执行finally?
*       答:先执行finally.
*        如以下代码所示,finally里中的语句是打印一句话,try里的return是返回一个字符串.
*        而这段代码的运行结果是:
*                                                 执行到了finally
*                                                 执行到了return                  
*       可见,是先执行finally,后执行return                                                                     
*/






14 个回复

正序浏览
groij 中级黑马 2015-8-24 18:23:38
14#
groij 发表于 2015-8-18 22:01
但是,这可以说成如果return之后带上其他的可执行代码,就先执行吧。没有,就finaly。至于你说的return 3 ...

什么??????
回复 使用道具 举报
groij 中级黑马 2015-8-18 22:01:22
13#
liuch111 发表于 2015-8-17 21:14
下面代码能看明白 你基本上就懂了

但是,这可以说成如果return之后带上其他的可执行代码,就先执行吧。没有,就finaly。至于你说的return 30,要怎么证明,的确是先暂停呢?

点评

确定是问我?  发表于 2015-8-18 22:08
回复 使用道具 举报
你看我都还是在赚技术分的小菜鸟,今天才刚给自荐信,也不知道能不能赶上月底的课了。
回复 使用道具 举报
koibiki 发表于 2015-8-17 21:28
楼主可以运行下这个代码,这是传智风清扬老师的演示代码

根据这个代码可以看出return语句执行了两次,先形 ...

谢谢啊,你流程走到哪儿了?
回复 使用道具 举报
楼主可以运行下这个代码,这是传智风清扬老师的演示代码
  1. class FinallyDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 System.out.println(Demo());
  6.         }
  7.         public static int Demo()
  8.         {
  9.                 int a = 10;
  10.                 try
  11.                 {
  12.                         System.out.println(a/0);
  13.                         a = 20;
  14.                 }
  15.                 catch (ArithmeticException e)
  16.                 {
  17.                         a = 30;
  18.                         return a;
  19.                 }
  20.                 finally
  21.                 {
  22.                         a = 40;
  23.                 }
  24.                 return a;
  25.         }
  26. }
复制代码

根据这个代码可以看出return语句执行了两次,先形成了返回路径,但暂停了没有立即返回,此时a=30;然后执行finally,a赋值为40;然后再继续运行return语句,返回30。按照风老师的说法是finally语句是运行在return中间的。
楼主可以参考下这个说法
回复 使用道具 举报
本帖最后由 liuch111 于 2015-8-17 21:15 编辑

下面代码能看明白 你基本上就懂了
  1. public class FinallyTest1 {

  2.     public static void main(String[] args) {
  3.         
  4.         System.out.println(test11());
  5.     }
  6.    
  7.     public static String test11() {
  8.         try {
  9.             System.out.println("try block");

  10.            return test12();
  11.       } finally {
  12.            System.out.println("finally block");
  13.        }
  14.   }

  15.   public static String test12() {
  16.        System.out.println("return statement");

  17.        return "after return";
  18.    }
  19.    
  20. }
复制代码





回复 使用道具 举报
....


finally语句在return语句执行之后return返回之前执行的。
回复 使用道具 举报
李工 中级黑马 2015-8-17 20:51:11
7#
liuch111 发表于 2015-8-17 20:09
有问题 return后 没有语句,直接返回了!! 请问怎么证明呢 return中的语句先执行呢?? ...

return语句是后执行的啊

我想证明的是finally语句先执行。
回复 使用道具 举报
有问题 return后 没有语句,直接返回了!! 请问怎么证明呢 return中的语句先执行呢??
回复 使用道具 举报
帖子沉的太快
回复 使用道具 举报
看着像是可以的呢?
回复 使用道具 举报
运行结果都出来了,不会有问题了吧。
回复 使用道具 举报
楼主好棒呀,我还是小白只能看看啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马