java中finally与return的测试方法
生活随笔
收集整理的这篇文章主要介绍了
java中finally与return的测试方法
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
2019独角兽企业重金招聘Python工程师标准>>>
直入正题,测试程序如下,看执行结果和你想的是否一致?
public class ReturnTest {public static void main(String[] args) {System.out.println("=============test1==================");System.out.println(test1());System.out.println("===============================");System.out.println("=============test1_1==================");System.out.println(test1_1());System.out.println("===============================");System.out.println("\n============test2===================");System.out.println(test2());System.out.println("===============================");System.out.println("\n============test2_1===================");System.out.println(test2_1());System.out.println("===============================");System.out.println("\n============test3===================");System.out.println(test3());System.out.println("===============================");System.out.println("\n============test3_1===================");System.out.println(test3_1());System.out.println("===============================");}public static String test1() {String a = "in try";try {return a;} catch (Exception e) {} finally {a = "in finally";System.out.println("do finally");}return a;}public static String test1_1() {String a = "in try";try {return a;} catch (Exception e) {} finally {a = "in finally";System.out.println("do finally");return a;}}public static int test2() {int a = 1;try {return a;} catch (Exception e) {} finally {a = 2;System.out.println("do finally");}return a;}public static int test2_1() {int a = 1;try {return a;} catch (Exception e) {} finally {a = 2;System.out.println("do finally");return a;}}public static Helper test3() {Helper a = new Helper();a.a = 1;try {return a;} catch (Exception e) {} finally {a.a = 2;System.out.println("do finally");}return a;}public static Helper test3_1() {Helper a = new Helper();a.a = 1;try {return a;} catch (Exception e) {} finally {a.a = 2;System.out.println("do finally");return a;}}static class Helper {int a;public String toString() {return String.valueOf(a);}}}结果如下:
=============test1================== do finally in try =============================== =============test1_1================== do finally in finally ===========================================test2=================== do finally 1 ===========================================test2_1=================== do finally 2 ===========================================test3=================== do finally 2 ===========================================test3_1=================== do finally 2 ===============================很好理解了。
#结论:
在try catch块里return的时候,finally也会被执行。
return 语句会把后面的值复制到一份用来返回,如果return的是基本类型的,finally里对变量的改动将不起效果,如果return 的是引用类型的,改动将可以起效果。
finally里的return语句会把try catch块里的return语句效果给覆盖掉。
看来return语句并不一定都是函数的出口,执行return时,只是把return后面的值复制了一份到返回值变量里去了。看来最佳实践是:
最好把return放到方法尾而不要在try cath 里return
不要在try catch块和finally块里都包含return
如果在try catch块里return, 则不要在finally块里操作被return的变量
转载于:https://my.oschina.net/u/2391658/blog/706512
总结
以上是生活随笔为你收集整理的java中finally与return的测试方法的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: sails的简单配置以及controll
- 下一篇: vs shortcut