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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 你媚你魅你 初级黑马   /  2014-7-28 16:57  /  1934 人查看  /  10 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

用代码证明,在try中写了return,后面又写了finally,是先执行return还是先执行fianlly?

10 个回复

倒序浏览
本帖最后由 yqj 于 2014-7-28 23:04 编辑
  1. public class Test2 {
  2.         public static void main(String[] args) {
  3.                 System.out.println("main start");
  4.                 try {
  5.                         System.out.println("try");
  6.                         return;
  7.                 } catch (Exception e) {
  8.                
  9.                 }finally{
  10.                         System.out.println("finally");
  11.                 }
  12.                 System.out.println("main end");
  13.         }
  14. }
复制代码
回复 使用道具 举报 1 0

运行结果是:
main start
try
finally
应该是先运行finally,再运行return。不知道是不是对的
回复 使用道具 举报
我也考这题了
回复 使用道具 举报
应该是先运行try中return,再运行finally中的代码,又研究了下才发现以前的观点是错的
可以用以下代码证明:
思路:try中的return调用test2();方法是为了打印return运行记录,该方法在执行return时运行。

  1. package cn.test;

  2. public class Test2 {
  3.         public static void main(String[] args) {
  4.                 String str =test1();
  5.                 System.out.println("str:"+str);
  6.         }

  7.         private static String test1() {
  8.                 try {
  9.                         System.out.println("try");
  10.                         return test2(); //运行test2代码块
  11.                 } catch (Exception e) {

  12.                 }finally{
  13.                         System.out.println("finally");
  14.                         return "two";
  15.                 }
  16.         }

  17.         private static String test2() {
  18.                 System.out.println("return run!");
  19.                 return "one";
  20.         }
  21. }
复制代码

运行结果是:
try
return run!
finally
str:two
其中打印的return run!是在try中return执行时输出,再finally之前,说明try中return先运行;其次str的值为two而不为one(打印出了return run!说明try中的return被执行过的)说明one被覆盖了,也证明finally中的代码后执行
回复 使用道具 举报
小乖乖灬浩歌 来自手机 中级黑马 2014-8-2 18:17:12
地板
楼上说的是
回复 使用道具 举报
本地运行结果
1406998982171 this is finally time
1406998982165 this is return time
return 的时间是要早一些的

  1. public class TryTest
  2. {

  3.     public static void main(String[] args) {
  4.         
  5.         System.err.println(test()+" this is return time");
  6.     }
  7.    
  8.     private static long test(){
  9.         try{
  10.             return System.currentTimeMillis();
  11.         }catch(Exception e){
  12.             
  13.         }finally{
  14.             for(int i = 0; i < 1000000000; i++){
  15.             }
  16.             System.err.println(System.currentTimeMillis()+" this is finally time");
  17.         }
  18.         return 0;
  19.     }
  20. }
复制代码
回复 使用道具 举报
楼上这个方法好,直接调用系统时间看结果,顶一个
回复 使用道具 举报
本帖最后由 冒牌高手 于 2014-8-4 16:04 编辑

finally是必须执行的。
回复 使用道具 举报
bbdeyouxang 发表于 2014-8-3 01:06
本地运行结果
1406998982171 this is finally time
1406998982165 this is return time

挺高明的!好!
回复 使用道具 举报
先执行return 在执行finally
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马