天天看點

java finally return執行順序

很多人探讨Java中異常捕獲機制try...catch...finally塊中的finally語句是不是一定會被執行?很多人都說不是,當然他們的回答是正确的,經過我試驗,至少有兩種情況下finally語句是不會被執行的:

(1)try語句沒有被執行到,如在try語句之前就傳回了,這樣finally語句就不會執行,這也說明了finally語句被執行的必要而非充分條件是:相應的try語句一定被執行到。

(2)在try塊中有System.exit(0);這樣的語句,System.exit(0);是終止Java虛拟機JVM的,連JVM都停止了,所有都結束了,當然finally語句也不會被執行到。

正确說法:finally語句是在try的return語句執行之後,return傳回之前執行。

public class FinallyTest1 {

    public static void main(String[] args) {
        
        System.out.println(test1());
    }

    public static int test1() {
        int b = 20;

        try {
            System.out.println("try block");

            return b += 80; 
        }
        catch (Exception e) {

            System.out.println("catch block");
        }
        finally {
            
            System.out.println("finally block");
            
            if (b > 25) {
                System.out.println("b>25, b = " + b);
            }
        }
        
        return b;
    }
    
}

結果:
try block
finally block
b>25, b = 100
100