自己的理解:
try-with-resources是JDK7的新語法結構,主要功能是自動關閉資源而不需要在finally里面手動close()關閉,
而且最重要的是,try塊中的異常不會被close()引起的異常壓制——因為不需要寫close()了,系統自動幫你完成——前提是實現了AutoCloseable或Closeable接口的類或接口。
Throwable.getSuppressed方法來獲取被抑制的異常。
-----------------------------------------------------------------------------------------------------------------
通俗易懂的介紹:
JDK7以前如果rd.readLine()(try語句塊)與rd.close()(在finally塊中)都拋出異常,
則只會拋出finally塊中的異常,不會拋出rd.readLine()中的異常。這樣經常會導致得到的異常信息不是調用程序想要得到的。
JDK7及以后版本中如果采用try-with-resource機制,
如果在try-with-resource聲明中拋出異常(可能是文件無法打或都文件無法關閉)同時rd.readLine()也拋出異常,則只會拋出rd.readLine()的異常。
在JDK7中只要實現了AutoCloseable或Closeable接口的類或接口,都可以使用try-with-resource來實現異常處理和資源關閉。
但是注意異常拋出順序。在Java se 7中的try-with-resource機制中異常的拋出順序與Java se 7以前的版本有一點不一樣,是先聲明的資源后關閉。
來源自:https://blog.csdn.net/fanxiaobin577328725/article/details/53067163#commentBox
----------------------------------------------------------------------------------------------------------------------------------
還可以參考:
https://blog.csdn.net/fw0124/article/details/49946975
最后的例子可以自己多運行幾遍就能完全理解了。
----------------------------------------------------------------------------------------------------------------------------------
如果讀懂了上面兩篇博客,再閱讀這篇文章
https://blog.csdn.net/skyupward/article/details/60154461
,應該就能一目十行觸類旁通了。