try {}里有一個 return 語句,那么緊跟在這個 try 后的 finally {}里的 code 會不會被執行,什么時候被執行,在 return 前還是后?


 

會在return中間執行!

try 中的 return 語句調用的函數先於 finally 中調用的函數執行,也就是說 return 語句先執行,finally 語句后執行, return 並不是讓函數馬上返回,而是 return 語句執行后,將把返回結果放置進函數棧中,此時函數並不是馬上返回,它要執行 finally 語句后才真正開始返回!但此時會出現兩種情況:

①、如果finally中也有return,則會直接返回並終止程序,函數棧中的return不會被完成!;

②、如果finally中沒有return,則在執行完finally中的代碼之后,會將函數棧中的try中的return的內容返回並終止程序;

catch同try;

 

package com.test;

public class Test1 {
    public static void main(String[] args) {
        try {
            System.out.println(new Test1().testname());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public String testname() throws Exception {
        String t = "";

        try {
            t = "try";
            System.out.println("try");
            return t;
        } catch (Exception e) {
            // result = "catch";
            t = "catch";
            return t;
        } finally {

            System.out.println("finally");
            // return t = "finally";
        }
    }
}
打印結果如下:
try
finally
try

將finally中的注釋放開,打印結果如下:

try
finally
finally

結論:finally中的代碼肯定會執行,但是會先執行try中的代碼,如果try中有return,那么return的東西會先放到函數棧中,然后再執行finally中的代碼,

①、如果finally中也有return,則會直接返回並終止程序,函數棧中的return不會被完成!;

②、如果finally中沒有return,則在執行完finally中的代碼之后,會將函數棧中的try中的return的內容返回並終止程序;

catch同try;

啰嗦了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM