天天看點

java7 try-with-resources 很香

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應該自動将其稱為。手動調用它可能會導緻意外結果。

學習愉快!

繼續閱讀