try catch finally執行與返回值問題

2021-08-18 13:27:33 字數 1188 閱讀 9687

一、執行順序

執行try塊;

如果try塊中有異常,則執行catch塊;

無論有無異常,都會執行finally塊;

但是要注意,如果在try塊或者catch塊中新增了system.exit(0),程式會退出,finally不會執行。 

system.exit(0):將停止當前執行緒和所有其他當場死亡的執行緒。finally塊並不能讓已經停止的執行緒繼續執行。 

當system.exit(0)被呼叫時,虛擬機器退出當前要執行兩項清理工作: 

(1)執行系統中註冊的所有關閉鉤子; 

(2)如果程式呼叫了system.runfinalizeronexit(true);,那麼jvm會對所有的還未結束的物件呼叫finalizer。

二、返回值問題-return

無論try-catch中有無異常,如果finally塊中有return語句,最後返回的是finally的return值;

如果finally中沒有return語句,若try中有異常,則返回catch中的return值,反之,則返回try中return值。在這種情況下,return語句是在finally之後執行的。也就是說,如果你宣告你的方法要返回乙個值,在方法體中你使用了try catch finally,則必須在catch或者finally語句塊中宣告要return的值,否則會編譯不通過。

**分析如下:

package com.trycatch;

public

class test

private

static

intreturntest()catch(exception e)finally

}}

程式無異常,**中返回值reval進過了try的賦值,最後到了finally中賦值為0,所以結果返回0;

try塊中:-2

finally塊中:1

返回值:0

若在try中新增乙個異常int a = 1 / 0;則會先執行catch中的賦值return,最後也要執行finally中的返回值。

續加:try-finally形式的模組,在平時很少用,這樣用有乙個很明顯的目的就是如果出現異常,則當前程式不處理,只需要在finally清理資源並將該無法處理的異常拋給它的使用者自行處理,這樣實現了異常處理(throw)與異常清理(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中先把要返回的結果存放到不同於...