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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Mokill0911 中级黑马   /  2014-8-27 02:12  /  1380 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Mokill0911 于 2014-8-27 02:35 编辑

发现交了辞呈之后心情不太好,所以拿基础测试题练练手稳定下情绪,然后发现了一些有趣的问题,贴出来大家分享~~~

测试题6、 用代码证明,在try中写了return,后面又写了finally,是先执行return还是先执行finally?

首先确信答案是先执行finally,然后这是我的代码:
  1. public class Test6
  2. {
  3.                 public static void main(String[] args)
  4.                 {
  5.                         System.out.println(tempMethod());
  6.                 }
  7.                
  8.                 public static String tempMethod()
  9.                 {
  10.                         try
  11.                         {
  12.                                 return ("return in the try...");
  13.                         }
  14.                         catch( Exception e)
  15.                         {}
  16.                         finally
  17.                         {
  18.                                 System.out.println( "this's finally...");
  19.                         }
  20.                 return ("End return...");
  21.                 }
  22. }
复制代码
执行结果:
this's finally...
return in the try...


但是我在论坛上有同学说应该是return先执行,
这是他 (报纸同学) 的帖子:http://bbs.itheima.com/forum.php?mod=viewthread&tid=101722
是的,最开始我没仔细想,执行了一遍代码发现结果确实如他所说
然后我把他的代码进行了一些修改,发现实际情况应该是这样的~
  1. class test6temp
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 System.out.println("i= "+tempMesthod ());
  6.         }
  7.         
  8.         public static int tempMesthod()
  9.         {
  10.                 int i =1;
  11.                 try
  12.                 {
  13.                         return ++i;
  14.                 }
  15.                 catch(Exception e)
  16.                 {
  17.                         
  18.                 }
  19.                 finally
  20.                 {
  21.                         i= 5;
  22.                        //我增加了这行代码 System.out.println(i);
  23.                 }
  24.         return i;
  25.         }
  26. }
复制代码

注释是我增加的代码,显然这位童鞋被JVM欺骗了;P





3 个回复

倒序浏览
搜打死内 , 学习下。
回复 使用道具 举报
那到底是具体的执行过程是咋样的呢,能用文字总结一下不?
回复 使用道具 举报
潘多拉 发表于 2014-8-27 07:43
那到底是具体的执行过程是咋样的呢,能用文字总结一下不?

你是问我的代码还是那位同学的代码?

其实都很简单的,因为我直接设定的是打印语句,所以你把代码复制到编译器里面,编译完运行看结果就一目了然了。

就是证明一下当try语句里有return语句的时候,如果下方还有finally的话会先执行哪一条。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马