try catch finally執行順序

2021-10-21 03:11:39 字數 3039 閱讀 1140

不管有沒有出現異常,finally**塊都會執行;

不管try和catch的**塊中有return時,finally仍會執行,

且如果finally**塊也有return,則此**肯定會返回finally執行的return值。

分有return和沒有return來討論try-catch-finally執行順序的情況:

舉個例子:

try  catch (exception e)

finally m(

);

1.1 當try中的t()沒有丟擲異常

因為沒有捕捉到異常,那麼執行try而不會執行catch,而finally無論如何都要執行。

其執行順序為:t() --> tt() --> f() --> m()

1.2 當try中的t()丟擲了異常

當 t() 中丟擲異常,那麼 t() 中從丟擲異常的語句之後的**以及 tt() 都不會執行, 程式會嘗試捕捉異常。

捕捉exception,捕捉成功,執行 c() ;

一旦捕捉到乙個異常,不會再嘗試捕捉其他異常,直接執行finally裡的f();

執行後面的函式 m() 。

其執行順序為:t() --> c() --> f() --> m()

2 有return

2.1

try

catch()

finally

return

;

程式按順序執行

2.2 try塊中有return

try

catch()

finally

return

2;

程式執行try塊中return之前(包括return語句中的表示式運算)**;

再執行finally塊,最後執行try中return;

finally塊之後的語句return不再執行,因為程式在try中已經return過了。

結論:得到try中的返回值1。

2.3 catch塊中有return

try

catch()

finally

return

2;

程式先執行try,如果遇到異常執行catch塊,

有異常:執行catch中return之前(包括return語句中的表示式運算)**,再執行finally語句中全部**,最後執行catch塊中return。 finally之後的return不再執行。

無異常:執行完try再finally再return。

結論:有異常影響catch,執行catch中的return得到返回值1。

2.4 try塊和finally塊中有return

try

catch()

finally

無異常:程式執行try塊中return之前(包括return語句中的表示式運算)**;再執行finally塊,因為finally塊中有return所以提前退出,而不再執行try中的return;

有異常:不執行try,順序執行catch-finally

結論:得到finally中的返回值2。

2.5 catch塊和finally塊中有return

try

catch()

finally

無異常:執行try後跳過catch執行finally;得到finally的返回值2;

有異常:程式執行catch塊中return之前(包括return語句中的表示式運算)**;再執行finally塊,因為finally塊中有return所以提前退出。而不再執行catch中的return。

結論:得到finally中的返回值2。

2.6 try塊、catch塊和finally塊中有return

try

catch()

finally

程式執行try塊中return之前(包括return語句中的表示式運算)**;

無異常:然後再執行finally塊,因為finally塊中有return所以提前退出。

有異常:執行catch塊中return之前(包括return語句中的表示式運算)**;再執行finally塊,因為finally塊中有return所以提前退出。

結論:得到finally中的返回值3。

無return,無異常

try

->finally

無return,有異常

try

(未出現異常的前半段)

->

catch

->finally

try或catch中有return,無異常

try

-> finally -

>

return

(try

)

try或catch中有return,有異常

try

(未出現異常的前半段)

->

catch

->finally-

>

return

(catch

)

只要是finally中有return的情況

不論有沒有異常,try或catch中有沒有return

try

/catch

->

return

(finally)

我們可以看出當finally中有return的時候,相當於此**肯定會返回該值。

public

class

exceptiontest

public

static exceptiontest test()

catch

(exception e)

finally

}}

輸出:10

當 try-catch 塊中有return 語句時,return 語句會暫存變數值,然後執行 finally **塊。

try catch finally執行順序

public class test public static int ma catch exception e finally 說明 不出現異常情況 執行順序 try finally 出現異常情況 執行順序 try catch finally try中有返回語句,沒有異常 執行順序 try ret...

try catch finally執行順序

結論 1 不管有木有出現異常,finally塊中 都會執行 2 當try和catch中有return時,finally任會執行 3 finally是在return表示式運算後前執行的,所以函式返回值是在finally執行前確定的 4 finally中最好不要包含return,否則程式會提前退出,返回...

try catch finally使用體會

try catch finally public class finallytest static int test finally 結果是2。在try語句中,在執行return語句時,要返回的結果已經準備好了,就在此時,程式轉到finally執行了。在轉去之前,try中先把要返回的結果存放到不同於...