【sonar-block】Use try-with-resources or close this "BufferedInputStream" in a "finally" clause.


自己的理解:

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

,應該就能一目十行觸類旁通了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM