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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. /*
  2. * 需求:如果在finnally执行的前面有return语句,则finally里的代码还会执行吗,会,在return的前还是后?
  3. * 答:会,前。准确的讲是在 return 的中间
  4. */
  5. public class FinallyDemo {
  6.         public static void main(String[] args) {
  7.                 // 调用方法,输出结果
  8.                 System.out.println(getInt()); // 结果 a = 30
  9.         }

  10.         public static int getInt() {
  11.                 // 定义数组
  12.                 int[] arr = { 11, 22, 33, 44, 55 };
  13.                 int a = 10;
  14.                 // 异常处理
  15.                 try {
  16.                         System.out.println(arr[5]);
  17.                         a = 20;
  18.                 } catch (ArrayIndexOutOfBoundsException e) {
  19.                         a = 30;
  20.                         return a;
  21.                         // 当执行到 return a 时,会形成 return 30 的返回路径。
  22.                         // 但此时发现还有下面有 finally ,所以就跳转到执行 finally 语句了, a = 40。
  23.                         // 执行完 finally 语句后又回到了原来的返回路径,虽然a变成了40,但是输出的还是原来的return 30。
  24.                 } finally {
  25.                         a = 40;
  26.                 }
  27.                 return a;
  28.         }
  29. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1 这时基础测试题哦

查看全部评分

5 个回复

倒序浏览
奔跑的猴子 来自手机 中级黑马 2015-2-9 19:50:59
沙发
赞一个
回复 使用道具 举报
学习了,这个还真没注意到,还以为结果是40
回复 使用道具 举报
学习了,收藏了。
回复 使用道具 举报
支持一下
回复 使用道具 举报
恩真的是30,可能是读到return时将返回的值复制了一份,然后执行finally最后跳转回来再执行的,我又将这里的a换成String类型来测试引用类型是否会改变,结果还是一样
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马