Java異常處置中同時有finally和return語句的履行成績。本站提示廣大學習愛好者:(Java異常處置中同時有finally和return語句的履行成績)文章只能為提供參考,不一定能成為您想要的結果。以下是Java異常處置中同時有finally和return語句的履行成績正文
在Java中當try、finally語句中包括return語句時,履行情形究竟是如何的,finally中的代碼能否履行,年夜家眾口紛纭,有的說會履行,有的說不會履行,究竟哪一種說法准確,如今經由過程上面的例子加以解釋:
第一種情形:try中包括return語句,finally中不包括
public class TestTry { static String s=""; public static void main(String args[]){ s = test1(); System.out.println("8 "+s); } public static String test1(){ try{ System.out.println("try....."); return s = "a"; } finally{ s="b"; System.out.println("17 "+s); } } }
這裡我們界說了一個字符串 s,在try外面將"a"賦值給s,並直接前往,在finally外面把"b"賦值給s,終究s的值是a照樣b呢?上面是履行的成果
try..... 17 b 8 a
我們發明最初的成果是a,然則b優先於a打印出來了,這是為何呢?經由過程debug單步驟試我們發明,在履行try中的return之前會先履行finally中的代碼,以後再履行return語句。假如finally中也包括return語句,會湧現甚麼情形呢,我們看第二種情形。
第二種情形:try,finally中都包括return語句
我們將下面的代碼稍作修改
public class TestTry { static String s=""; public static void main(String args[]){ s = test1(); System.out.println("8 "+s); } public static String test1(){ try{ System.out.println("try....."); return s = "a"; } finally{ return s="b"; } } }
將finally中的s="b";直接改成return s="b";,會湧現甚麼樣的成果呢?字符串s是a照樣b呢?
try..... 8 b
我們發明最初的打印成果是b。
我們曉得return語句用在某一個辦法中,一是用於前往函數的履行成果,二是用於前往值為void類型的函數中,僅僅是一個return語句(return ;),此時用於停止辦法的履行,也即此return後的語句將不會被履行,固然,這類情形下return語句後不克不及再有其它的語句了。
public static int print() { int c = 1; try { c++; System.out.println("try履行中..."); return c+100; //--------1 } catch (Exception e) { e.printStackTrace(); //return c; //--------4 } finally { c++; System.out.println("finally履行中..."); return c; //--------2 } //return c; //---------3 }
法式履行的成果為:
run:
try履行中...
finally履行中...
3
勝利構建 (總時光: 0 秒)
留意,2與3地位處的return語句只能有一個,而且2、3、4中必需有一個return語句,假如2出履行前方法就停止了,3處的語句得不到履行。
try語句塊履行到1處時,會將會將函數的前往值寄存到別的一個暫時變量(分歧與c的變量,它的值為102)中,因為未產生異常,緊接著將會履行finally語句塊,2處又碰到一個語句塊,並將前往值寄存莅臨時變量(值為3)中,終究前往的是此處的暫時變量的值,此處return履行完成後,該辦法停止。
public static int print() { int c = 1; try { c++; System.out.println(c); System.out.println("try"); return c+100; //--------1 }finally { c++; System.out.println(c); System.out.println("finally"); } }
上述代碼中finally語句塊中沒有return語句,函數終究前往的是第一個暫時變量的值,也即102,履行成果以下:
run: try finally 102 勝利構建 (總時光: 0 秒)
結論:1.不管try外面有無return語句,finally語句必定都邑履行(不愧是finally,名字起的好)。
2.假如finally中沒有return語句,try外面有return,那末在履行try中的return語句之前會先去履行finally中的代碼,再去履行try中的return語句;假如在finally中也包括return語句,將會直接前往,不再去履行try中的return語句。