黑马论坛--异常中catch代码块中有return时finally是怎么执行的讨论
来源:互联网 发布:java项目描述怎么写 编辑:程序博客网 时间:2024/05/21 10:47
在坛子里发现有人讨论在异常处理的catch中有return同时又用finally对返回值进行操作时是怎么执行的有了一下代码:
<span style="font-family: Arial, Helvetica, sans-serif;">/*</span>
* 需求:如果在finally执行的前面有return语句,则finally里的代码还会执行吗,会,在return的前还是后?* 答:会,前。准确的讲是在 return 的中间*/public class FinallyDemo { public static void main(String[] args) { // 调用方法,输出结果 System.out.println(getInt()); // 结果 a = 30 } public static int/*String*/ getInt() { // 定义数组 int[] arr = { 11, 22, 33, 44, 55 }; int a = 10;//String a="abc"; // 异常处理 try { System.out.println(arr[5]); a = 20;//a="a"; } catch (ArrayIndexOutOfBoundsException e) { a = 30; return a; // 当执行到 return a 时,会形成 return 30 的返回路径。 // 但此时发现还有下面有 finally ,所以就跳转到执行 finally 语句了, a = 40。 // 执行完 finally 语句后又回到了原来的返回路径,虽然a变成了40,但是输出的还是原来的return 30。 } finally { a = 40;//a="b" } return a; }}
上面我又用了String类型的引用类型来替换发现还是输出了catch中的a
所以得出了一下结论:
当异常时读到return时将返回的值复制了一份,然后执行finally最后跳转回来再执行的,我又将这里的a换成String类型来测试引用类型是否会改变,结果还是一样
<span style="font-family: Arial, Helvetica, sans-serif;">/*</span>
* 需求:如果在finnally执行的前面有return语句,则finally里的代码还会执行吗,会,在return的前还是后?* 答:会,前。准确的讲是在 return 的中间*/public class FinallyDemo { public static void main(String[] args) { // 调用方法,输出结果 System.out.println(getInt()); // 结果 a = 30 } public static int/*String*/ getInt() { // 定义数组 int[] arr = { 11, 22, 33, 44, 55 }; int a = 10;//String a="abc"; // 异常处理 try { System.out.println(arr[5]); a = 20;//a="a"; } catch (ArrayIndexOutOfBoundsException e) { a = 30; return a; // 当执行到 return a 时,会形成 return 30 的返回路径。 // 但此时发现还有下面有 finally ,所以就跳转到执行 finally 语句了, a = 40。 // 执行完 finally 语句后又回到了原来的返回路径,虽然a变成了40,但是输出的还是原来的return 30。 } finally { a = 40;//a="b" } return a; }}
0 0
- 黑马论坛--异常中catch代码块中有return时finally是怎么执行的讨论
- try catch finally 中有多个return时,代码是这样执行的
- try-catch-finally中throw,return时的执行顺序
- java异常try catch finally中return具体执行顺序
- try-catch-finally中finally的break,return执行顺序
- 异常处理及try/catch/finally/return 的执行顺序:
- 黑马程序员 try或catch中存在return 语句时,它们与finally 的执行顺序问题
- try-catch-finally结构 try中有异常或return时执行顺序
- Java try/catch/finally代码块中加入return后的执行顺序问题
- try{}catch{}finally{}中加入return后的执行顺序
- java中try catch finally与return的执行顺序
- try..catch..finally中包含return的执行顺序
- try-catch-finally中return的执行顺序
- Java中try-catch-finally-return的执行顺序
- try catch finally中return的 执行顺序问题
- 关于Java中try-catch-finally-return的执行顺序
- 关于Java中try-catch-finally-return的执行顺序
- try、catch、finally中return的执行顺序
- mysqlbinlog can not parse row based events
- hadoop下运行实例wordcount
- C#基础知识复习3:装箱、拆箱-文件操作-对象序列化
- 记事本
- 如何解决C、C++中stack overflow问题
- 黑马论坛--异常中catch代码块中有return时finally是怎么执行的讨论
- 数据结构拾遗(2) --红黑树的设计与实现(中)
- 代理模式与动态代理
- 算术运算符与表达式的综合运用
- LVS介绍
- C#正则表达式
- 一些VC的快捷键以及调试技巧
- 大数据实时处理:百分点实时计算架构和算法
- if判断标签实例