別再在finally裡面釋放資源了,解鎖個新姿勢!

2021-10-10 06:45:21 字數 979 閱讀 6400

在我們編碼過程中,不可避免的會用到於檔案操作 io 流、資料庫連線等開銷比較大的資源,用完之後需要通過 close 方法將其關閉,否則資源一直處於開啟狀態,可能會導致記憶體洩露等問題。

拿檔案操作流舉例,我們在使用時要try catch,用完了在finally中關閉,而關閉的時候還需要再try catch,可以說是非常麻煩了!**如下:

/**傳統寫法**/

bufferedreader br = null;

try}

catch

(ioexception e)

finally

catch

(ioexception e)

}}

而我們的新姿勢是使用jdk1.7中的try-with-resources語法,直接上**:

/**使用語法糖**/

try(bufferedreader br1 =

newbufferedreader

(new

filereader(""

)))}

catch

(ioexception e)

**是不是瞬間清爽了很多?趕緊用起來吧~

我們順便再來刨根究底一下吧,看下他編譯之後的樣子:

try

}catch

(throwable var32)

}finally

catch

(throwable var31)

}else}}

}catch

(ioexception var34)

其實背後的原理也很簡單,讓編譯器都幫我們做了關閉資源的工作而已。所以,再次印證了,語法糖的作用就是方便程式設計師的使用,最終還是要轉成編譯器認識的語言。

finally學習筆記

public class testfinally static int test finally public class testfinally1 public int get finally try中的return語句呼叫函式先於finally中呼叫的函式執行,也就說return語句先執行,fi...

物件導向 異常finally

finally 塊 定義一定執行的 通常用於關閉資源。class fushuexception extends exception class demo class exceptiondemo5 catch fushuexception e finally system.out.println ov...

finally的特殊用途

finally允許你定義乙個finally block 若try block被執行則這個finally block必定被執行,即使try block中發生了跳轉或者異常 它會在跳轉或異常前執行 function test finally test 這個特性很重要,它允許我們做某些事情 比如觸發事件的...