簡體   English   中英

AutoCloseable並引發異常

[英]AutoCloseable and throws exception

AutoCloseable具有“無效關閉引發異常”方法。 一些建議擴展此接口並覆蓋close方法並刪除Exception。 例如,請參見下面的鏈接。

但是,當我忘記將語句放在try-with-resources語句中時,close方法比未調用嗎?

  • 在try-with-resources中,關閉稱為
  • 在流api中,關閉稱為
  • 例如,當離開創建資源的方法時,由Java自動執行???

我在互聯網上搜索並查看了文檔的其他信息 兩者都建議刪除throws Exception語句。 但是我對此建議的反應是,將來將來我們項目中的某個人實現新接口(無例外)而忘記將它們放在“嘗試使用資源”中時,會導致資源泄漏。 對於我們的項目來說,這不是一個大問題,因為我們正在使用SonarQube,它將提到資源泄漏

位置示例:

AutoCloseable具有“無效關閉引發異常”方法。 一些建議擴展此接口並覆蓋close方法並刪除Exception。

您發布的鏈接並不建議作為一般情況,它向您展示io包為何具有自己的Closeable接口,該接口僅引發IOException (因為它不需要引發更一般的Exception 。)這使零差在運行時,它完全就位,因此,如果在使用io.Closeable接口時有任何嘗試拋出不是 IOException的異常,則會引發編譯器錯誤。

但是,當我忘記將語句放在try-with-resources語句中時,close方法比未調用嗎?

您似乎暗示這里沒有任何鏈接-當關閉其包裝的資源時, AutoCloseable可能引發的異常類型與無關。

在try-with-resources中,關閉稱為

是的,這是語言功能的重點。

在流api中,關閉稱為

除非您將其包裝在try資源塊中,否則不要這樣做。

例如,當離開創建資源的方法時,由Java自動執行???

不,如果您忘記關閉資源,它將保持打開狀態。

(此規則的唯一例外是,如果資源在終結器中關閉自身,終結器將在垃圾回收之前執行。這當然不是要依賴的東西,只是(有時)用作備用。)

當資源超出范圍時,try-with-resources自動調用close (也:您只能在try-with-resources中聲明一個AutoClosable )。 如果您忘記將資源放入該語言結構中,則必須手動關閉它。

AutoCloseable.close()方法不是析構函數(Java中沒有析構函數)-它是專門為try-with-resources創建的,因此如果未在該語句中使用,則不會調用-請參見文檔

退出在資源規范頭中已聲明該對象的try-with-resources塊時,將自動調用AutoCloseable對象的close()方法。 這種構造可確保及時釋放,避免資源耗盡異常和可能發生的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM