從AutoCloseable的注釋可知它的出現(xiàn)是為了更好的管理資源根蟹,準確說是資源的釋放,當一個資源類實現(xiàn)了該接口close方法傍睹,在使用try-catch-resources語法創(chuàng)建的資源拋出異常后螃成,JVM會自動調(diào)用close 方法進行資源釋放呕臂,當沒有拋出異常正常退出try-block時候也會調(diào)用close方法破托。像數(shù)據(jù)庫鏈接類Connection,io類InputStream或OutputStream都直接或者間接實現(xiàn)了該接口。
一個可能持有資源(如文件或套接字句柄)的對象直到它關(guān)閉歧蒋。{@code AutoCloseable} t對象的{@link #close()}方法在退出{code時被自動調(diào)用在Try}-with-resources塊中聲明了對象*資源規(guī)范頭土砂。這種構(gòu)造確保了提示釋放,避免了資源耗盡的異常和錯誤*可能發(fā)生其他情況@apiNote這是可能的谜洽,實際上是常見的萝映,為一個基類實現(xiàn)AutoCLoseable,即使不是所有的子類或*實例將保存可釋放的資源阐虚。用于必須運行的代碼在完全通用的情況下序臂,或者當知道facode Autocloseable}實例需要釋放資源時,建議使用{@code*嘗試}與資源建設(shè)。
基類有可能奥秆,實際上也是常見的*實現(xiàn)自動關(guān)閉逊彭,即使不是所有的子類或*實例將保存可釋放的資源。用于必須運行的代碼或者當已知{@code Autocloseable} *實例需要釋放資源時构订,建議使用{code . **嘗試}與資源建設(shè)侮叮。但是,當使用諸如t {@link java.util.stream悼瘾。Stream}支持基于I/0和*非基于1/0的形式囊榜,{@code try}-with-resources塊*使用非i /0形式時一般不必要