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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 人心如水 中级黑马   /  2014-6-14 12:00  /  1132 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

9 个回复

倒序浏览
finally是一定要执行的.不管怎么样,他会覆盖你try中的return
回复 使用道具 举报
谁先执行啊,要的就是执行顺序的证明
回复 使用道具 举报
最后执行fianlly,return可能会被覆盖掉
回复 使用道具 举报

最后执行fianlly,return可能会被覆盖掉
回复 使用道具 举报
应该是先执行return 的吧,fianlly中的代码不管如何最后都是要执行的
回复 使用道具 举报
自己运行这个代码试试:
  1. class ExceptionTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int n = fun(2);
  6.                 System.out.println("打印fun()函数返回的n值=  "+n);
  7.         }
  8.         public static int fun(int i)
  9.         {
  10.                 try
  11.                 {
  12.                         int m= i/0;
  13.                         return i++;
  14.                 }
  15.         
  16.                 catch (ArithmeticException e)
  17.                 {
  18.                         System.out.println("异常信息:"+e);
  19.                         System.out.println("catch 中的i = "+i);
  20.                         return i+3;   //返回的是 2+3, 而不是finally中对i的赋值再来加上3,
  21.                                                         //finally中对i的操作,不会影响此时catch中的return i+3

  22.                 }
  23.                
  24.                 finally
  25.                 {
  26.                         i++;
  27.                         i++;
  28.                         System.out.println("finally 执行  "+i);
  29.                         //return i+8;   //如果这里没注释
  30.                                                         //这里会返回12,而不会去返回catch中的  return i+3
  31.                 }
  32.         }
  33. }
复制代码
回复 使用道具 举报
2528870651 发表于 2014-6-14 21:19
自己运行这个代码试试:

万分感谢
回复 使用道具 举报

我以前问过这个问题的
回复 使用道具 举报
fanally是一定会执行的,return就不一定了,要看你程序有没有跳进你的return里。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马