異常捕獲時的return和finally

2021-08-20 09:40:36 字數 1543 閱讀 4439

以前一直認為在try,catch,finally中,try中的return 會在finally之後執行,今天和同事遇到,然後重新測試了一下,**如下:

/**

* 主方法

* * @param args

*/public static void main(string args)

/*** 測試方法

* * @return

*/private static int exexute()

catch (exception ex)

finally

return 0;

}/**

* return 方法

* * @return

*/private static int exexutea()

執行結果是:

this is atest

exexutea

finally

覺得和自己想的不太一樣吧。發現自己的記性不太好了...

後來在網上查詢,看到有網友舉了另外乙個例子,來研究是不是finally對return 是不是有影響。

網友舉了兩個例子,乙個是return 簡單資料型別,另乙個是放回包裝資料型別。**如下:

簡單資料型別的例子:

/**

* 主方法

* * @param args

*/public static void main(string args)

/*** 測試簡單資料型別

* * @return

*/private static int execute******()

catch (exception ex)

finally

return i;

}

執行結果是:

this is a test ******

10

看來finally的賦值並沒有對return造成影響

包裝資料型別的例子:

/**

* 主方法

* * @param args

*/public static void main(string args)

/*** 測試簡單資料型別

* * @return

*/private static stringbuilder executecomplex()

catch (exception ex)

finally

return sb;

}

執行結果:

this is a test ******

123321

執行結果受到了finally的影響。

虛擬機器棧中的返回分簡單資料型別和複雜資料型別,如果是簡單資料型別,虛擬機器棧直接記錄的是字面量,如果是複雜資料型別,那麼虛擬機器記錄的引用,所以在第二個例子中,改變了引用物件的內容,return 以後,引用的內容就改變了。

關於異常和異常捕獲。

異常即非正常狀態,主要包括書寫或語法上的錯誤導致直譯器無法正常執行。異常描述 importerror 匯入模組 物件失敗 indexerror 序列中沒有此索引 index keyerror 對映中沒有這個鍵 nameerror 未宣告 初始化物件 沒有屬性 syntaxerror python 語...

捕獲和丟擲異常

異常處理5個關鍵字 try catch finally throw throws 不捕獲異常 public class test 捕獲異常,finally 可以不要,用於 假設io資源關閉,就會用到。public class test catch arithmeticexception e fina...

丟擲異常和捕獲異常 多捕獲和最終重新丟擲的異常處理

丟擲異常和捕獲異常 joseph d.darcy宣布,在langtools團隊成員maurizio cimadamore開發的多捕獲實現成功的經驗之後,具有多捕獲和最終重新丟擲的改進的異常處理將成為即將到來的jdk 7構建的一部分。當前,使用者可以將變更集應用於jdk 7 langtools儲存庫的...