黑马程序员技术交流社区

标题: Java异常之 finally 前面加 return 的结果详解 [打印本页]

作者: 万合天宜    时间: 2015-2-9 19:21
标题: Java异常之 finally 前面加 return 的结果详解
  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. }
复制代码



作者: 奔跑的猴子    时间: 2015-2-9 19:50
赞一个
作者: 关山明月    时间: 2015-2-15 20:55
学习了,这个还真没注意到,还以为结果是40
作者: coolmiao13    时间: 2015-2-15 22:30
学习了,收藏了。
作者: 丶人世百态    时间: 2015-2-17 02:00
支持一下
作者: 枪杆不如笔杆    时间: 2015-2-17 10:09
恩真的是30,可能是读到return时将返回的值复制了一份,然后执行finally最后跳转回来再执行的,我又将这里的a换成String类型来测试引用类型是否会改变,结果还是一样




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2