1. 程式人生 > >try catch finally在有return的情況下的執行順序

try catch finally在有return的情況下的執行順序

1、不管有沒有出現異常,finally塊中的程式碼都會被執行;

2、當try和catch中有return時,finally仍然會執行;

3、finally是在return後面的表示式運算後執行的

  • 此時會先把要返回的值儲存起來,不管finally中的程式碼做什麼,返回的值不會改變,仍然是之前儲存的值。

4、finally中最好不要使用return,這會使得程式提前退出,返回值不是try或者catch中儲存的返回值。

例如: try{ return; }catch(){} finally{} return;

  1. 程式執行try塊中return之前(包括return語句中的表示式運算)程式碼;
  2. 再執行finally塊,最後執行try中return;
  3. finally塊之後的語句return,因為程式在try中已經return所以不再執行。
測試程式:
public class Test {
    public static void main(String[] args) {
        System.out.println("main m: " + function1());
    }

    static int function1() {
        int m = 0;
        try {
            ++m;
            return function2(m) + m;
        }
finally { ++m; System.out.println("finally m: " + m); } } static int function2(int m) { ++m; System.out.println("function2 m: " + m); return m; } }

執行結果:

function2 m: 2
finally m: 2
main m: 3