最近在翻看源碼時候發現有些類實現了AutoCloseable接口,這個接口很生疏,因此搜了下資料,學習了下,下面作個總結。數據庫
從AutoCloseable的註釋可知它的出現是爲了更好的管理資源,準確說是資源的釋放,當一個資源類實現了該接口close方法,在使用try-catch-resources語法建立的資源拋出異常後,JVM會自動調用close 方法進行資源釋放,當沒有拋出異常正常退出try-block時候也會調用close方法。像數據庫連接類Connection,io類InputStream或OutputStream都直接或者間接實現了該接口。函數
image.png學習
如上代碼建立了兩個資源,在try-catch-finally的finally裏面進行手動進行資源釋放,釋放時候還須要進行catch掉異常,這幾乎是經典資源使用的方式,那麼既然資源管理都是一個套路,那麼爲什麼不作到規範裏面那?因此AutoCloseable誕生了。spa
image.png對象
如上圖使用jdk1.7新增的try-catch-resources語法在try的()內部建立資源,建立的資源在退出try-block時候會自動調用該資源的close方法。Resource實現了AutoCloseable的close方法:接口
image.png資源
運行結果爲:get
image.png源碼
把read函數裏面註釋的拋異常代碼打開,運行結果爲:io
image.png
so,從運行結果,總結以下幾點