Java 7為懶惰的Java開發人員帶來了一些非常好的功能。嘗試資源是這種功能之一,它可以減少代碼行,并使代碼更健壯。在本教程中,我将讨論有關此功能的内容。
1.資源清除的舊方法(在Java 7之前)
**我們長期以來一直在這樣做。例如,從檔案系統讀取檔案。代碼可能看起來有所不同,但流程如下例所示:
這些類型的代碼在具有大量IO操作的應用程式代碼庫中非常常見。
try和catch塊中的代碼本質上很重要,并且具有一些特定于應用程式的邏輯。但是,終于封鎖了嗎?在大多數情況下,finall塊隻是被複制粘貼,目的是通過關閉它們來避免損壞資源。
當您有3-4個這樣的資源要在單個finally塊中關閉時,這些final塊看起來更難看。當我們知道時,您是否不認為這些final塊不必要地存在,我們必須以任何方式關閉資源而沒有任何例外情況?
Java 7通過try-with-resources功能解決了這個問題。#
2.使用try-with-resources的新方法(文法示例)
現在看看在Java 7中打開和關閉資源的新方法。
有兩件事需要密切注意:
檔案資源(BufferedReader)以特殊方式在try塊中打開(在小括号内)。
finally塊完全消失了。
最後但并非最不重要的一點是,代碼看起來很漂亮且易于閱讀。很好,對嗎?但是它實際上是如何工作的?
3.實際如何運作?
在Java 7中,我們有一個新的超級接口java.lang.AutoCloseable**。該接口有一種方法:
Java文檔建議此接口在不再需要時必須關閉的任何資源上實作。
當我們在特殊的try-with-resource塊中打開任何此類AutoCloseable資源時,在try塊完成後,JVM會對在“ try()”塊中初始化的所有資源立即調用close()方法。
例如,BufferedReader已實作close()方法檔案如下:
由于上述方法定義,當JVM調用此方法時,所有基礎流或IO資源都将關閉。
4.向自定義資源添加功能
好吧,這是一個很好的資源清理設計。但是它僅适用于JDK本機類嗎?沒有。您也可以将其用于自定義資源。
例如,我在以下代碼中建立了一個自定義資源:
現在,我将在示例代碼中使用它:
控制台中的輸出清楚地證明,try塊完成後,資源将自動關閉。
5.總結
這就是Java 7中使用try-with-resources進行自動資源管理的全部内容。讓我們逐點記下重點内容:
在Java 7之前,我們必須使用finally塊來清理資源。最後,塊不是強制性的,但是清理資源是為了防止系統損壞。
使用Java 7,無需顯式的資源清理。它是自動完成的。
在try-with-resources塊(try(…){…})中初始化資源時完成自動資源清理。
由于發生了新界面AutoCloseable,是以發生了清理。try塊完成後,JVM将立即調用其close方法。
如果要在自定義資源中使用此功能,則必須實作AutoCloseable接口。否則程式将無法編譯。
您不應在代碼中調用close()方法。JVM應該自動将其稱為。手動調用它可能會導緻意外結果。
學習愉快!