try中return某值,而finally中修改了这个值
来源:互联网 发布:身份证电子版制作软件 编辑:程序博客网 时间:2024/06/16 11:08
try中return某值,而finally中修改了这个值
首先上结论:
- try{…} finally{…} return
- 顺序执行
- try{ return } finally{…} return
- finally修改基本类型,则不影响返回值
- finally修改非基本类型,影响返回值
- try{ return } finally{ return }
- try的return表达式执行,但不返回。在finally中返回
本文按以下三方面进行实验
- try中无return、finally中无return
- try中有return、finally中无return
- try中有return、finally中有return
- 最后总结
1、try中无return,finally中无return
此时程序就是顺序执行,当执行func(10)时,首先执行try{…},然后执行finally{…},最终的返回值是12
public static int func(int x) { try { x++; }catch(Exception e) { }finally { x++; } return x;}
2、try中有return,finally中无return
- 如果发生改变的是基本类型(byte、short、int、long等),finally虽然执行,但是不影响 最终返回值
- 如果发生改变的是非基本类型(对象),则finally影响返回的值
Example1:基本类型
public static int func(int x) { try { x++; // 执行顺序 1 return x++; // 执行顺序 2 }catch(Exception e) { }finally { System.out.println("x = " + x); // x = 3 System.out.println("finally"); //执行顺序 3 x += 2; } // 下面的代码不执行,因为在try中就return了 System.out.println("return"); return x;}
上面代码执行的顺序是:
x++
return x++ ,不返回而是执行x++,并将结果缓存起来。等到finally执行完后再返回。
System.out.println(“finally”);
Example2:非基本类型
class A { int val = 0;}public static A func(A a) { try { a.val = 1; // 执行顺序 1 return a; // 执行顺序 2 }catch(Exception e) { }finally { a.val = 2; // 执行顺序 3 } // 下面的代码不执行 System.out.println("return"); return a;}// Test caseA a = new A();System.out.println(func(a).val); // 2
上面代码执行的顺序是:
a.val = 1
return a; // 先不返回
a.val = 2;
3、try中有return,finally中有return
Example1:基本类型
public static int func(int x) { try { return x++; // 执行顺序 1 }catch(Exception e) { }finally { System.out.println("finally"); // 执行顺序 2 x += 2; // 执行顺序 3 return x; // 执行顺序 4 }}
执行func(10)的结果是:13
首先执行try中 return的x++,但是结果不返回,而是缓存起来。
然后执行finally中的语句,最后在finally中返回。
Example2:非基本类型
class A { int val = 0;}public static A func(A a) { try { a.val++; // 执行顺序 1 return a; }catch(Exception e) { }finally { System.out.println("finally"); // 执行顺序 2 a.val++; // 执行顺序 3 return a; // 执行顺序 4 }}
与基本类型相似,首先执行try中 a.val++,但是结果不返回,而是缓存起来。
然后执行finally中的语句,最后在finally中返回。
总结一下:
try{…} finally{…} return
- 顺序执行
try{ return } finally{…} return
- finally修改基本类型,则不影响返回值
- finally修改非基本类型,影响返回值
try{ return } finally{ return }
- try的return表达式执行,但不返回。在finally中返回
阅读全文
0 0
- try中return某值,而finally中修改了这个值
- try{}中return和finally{}
- try..finally中使用return
- try--catch--finally中return返回值执行的顺序
- 在try-catch-finally中, return
- try-catch-finally中return的执行情况
- try-catch-finally中return的执行情况
- try-catch-finally中return的执行情况
- try-catch-finally中return的执行情况
- try-catch-finally中return的执行情况
- try-catch-finally中return的执行情况
- try-catch-finally中return的执行情况
- try中return问finally是否执行
- try-catch-finally中return的执行情况
- try-catch-finally中return的执行情况
- try-catch-finally中return的执行情况
- try-catch-finally中return的执行情况
- try-catch-finally中return的执行情况
- Linux系统上安装VMware Workstation
- 苹果内存取证工具volafox
- c语言编程中%g是什么格式
- 笔记:关于protobuf协议传输repeated(即表/数组)类型数据出错问题。
- JAVA正则表达式 Pattern和Matcher
- try中return某值,而finally中修改了这个值
- Java排序算法之基数排序
- 解决“指定的服务已经标记为删除”问题,安装mysql的时候
- C#回调函数和闭包
- cocos2dx Android虚拟机调试问题
- HBase 1.2.4 部署
- thinkphp使用文件缓存的实例
- HR面Q&A
- 102/107. Binary Tree Level Order Traversal/II