黑马程序员技术交流社区
标题:
Java异常之 finally 前面加 return 的结果详解
[打印本页]
作者:
万合天宜
时间:
2015-2-9 19:21
标题:
Java异常之 finally 前面加 return 的结果详解
/*
* 需求:如果在finnally执行的前面有return语句,则finally里的代码还会执行吗,会,在return的前还是后?
* 答:会,前。准确的讲是在 return 的中间
*/
public class FinallyDemo {
public static void main(String[] args) {
// 调用方法,输出结果
System.out.println(getInt()); // 结果 a = 30
}
public static int getInt() {
// 定义数组
int[] arr = { 11, 22, 33, 44, 55 };
int a = 10;
// 异常处理
try {
System.out.println(arr[5]);
a = 20;
} catch (ArrayIndexOutOfBoundsException e) {
a = 30;
return a;
// 当执行到 return a 时,会形成 return 30 的返回路径。
// 但此时发现还有下面有 finally ,所以就跳转到执行 finally 语句了, a = 40。
// 执行完 finally 语句后又回到了原来的返回路径,虽然a变成了40,但是输出的还是原来的return 30。
} finally {
a = 40;
}
return a;
}
}
复制代码
作者:
奔跑的猴子
时间:
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