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


package com.swift;

public class Try_Catch_Finally_Test {

    public static void main(String[] args) {
        /*
         * try{}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執行,什么時候被執行,在return前還是后?
         */

        System.out.println("執行return先不返回值,把值暫存,等待finally執行完再把那個保存的值返回 "+new Try_Catch_Finally_Test().test());
    }

    static int test() {
        int x = 1;
        try {
            return ++x;
        } finally {
            ++x;
            System.out.println("finally先執行,return最后執行 "+x);
        }
    }
}

finally中也有return ,最終返回finally中的return

package com.swift;

public class Try_Catch_Finally_Test {

    public static void main(String[] args) {
        /*
         * try{}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執行,什么時候被執行,在return前還是后?
         */

        System.out.println("執行return先不返回值,把值暫存,等待finally執行完再把那個保存的值返回 "+new Try_Catch_Finally_Test().test());
    }

    static int test() {
        int x = 1;
        try {
            return ++x;
        }catch(Exception e) {
            e.printStackTrace();
            return ++x;
        }finally {
            ++x;
            System.out.println("finally先執行,return最后執行 "+x);
            return ++x;
        }
    }
}

 有人說return執行2次,finally在中間執行,可以這樣理解,可能也方便死記

但我覺得return就是在finally后執行的,在finally執行后把返回值返回給調用處,只是要注意返回的值不是最終的值,而是return將要把返回值返回卻因finally出現不能返回了而臨時保存的值。這里有一個打斷。

 


免責聲明!

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



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