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