標籤:
在任何一本Java教材中,異常處理都是作為單獨的章節講解的,足可見其分量。
而真正的能夠用好這個知識,只有經曆實際項目的開發才會有點體會。
1、try catch finally的執行順序
(1).一般情況下:try----catch----finally呢
(2).如果try中有return:try----finally----return
(3).如果catch中有return:try----catch ----finally----return
在後兩種情況下,reurn會被暫存在棧裡面,等到finally執行完再返回。
這種機制保證無論出現什麼情況,在try catch過程中finally都被執行一次,特別適合用於釋放資源,例如釋放資料庫連結、釋放開啟的檔案流等
下面看這一段代碼,結果t會是神馬東東?
public static final String test() { String t = ""; try { t = "try"; return t; } catch (Exception e) { t = "catch"; return t; } finally { t = "finally"; //return t; } }
上面我們講到finally之前,return會被暫存到棧裡面。上面代碼裡的t就會暫存起來,等到實際return的時候重新啟用,所以上面的代碼的正確傳回值是"try"。
但是如果我們在finlly字句中添加了return,那麼前面try子句中的t值就會被淹沒,此時實際的傳回值會是"finally"
2、try catch finally結構使用的建議
不建議在finally塊中添加return,因為會消化掉try catch中的異常資訊,不利於錯誤的正常處理,合理的return語句的位置:
(1).return語句只在函數最後出現一次。
(2).return語句僅在try和catch裡面都出現。
(3).return語句僅在try和函數的最後都出現。
(4).return語句僅在catch和函數的最後都出現。
參考: http://www.cnblogs.com/aigongsi/archive/2012/04/19/2457735.html
Java中的try catch finally