2012-04-11 25 views
40

雖然在Eclipse中的自定義格式選項,在代碼的樣件的一個瞎搞,我看到代碼如下:新/陌生的Java「try()」語法?

/** 
* 'try-with-resources' 
*/ 
class Example { 
    void foo() { 
     try (FileReader reader1 = new FileReader("file1"); FileReader reader2 = new FileReader("file2")) { 

     } 
    } 
} 

我從來沒有見過像這樣使用try,我一直在編碼在Java 9年!有沒有人知道你爲什麼要這樣做?這樣做有什麼用途/好處?

的代碼的其他部分我看見了,我覺得這是一個非常有用的速記所以我在這裏分享它爲好,這是很明顯它做什麼:

/** 
* 'multi-catch' 
*/ 
class Example { 
    void foo() { 
     try { 
     } catch (IllegalArgumentException | NullPointerException | ClassCastException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+4

http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html – 2012-04-11 23:15:42

+4

用例的好處就是你在嘗試括號打開資源是關閉你不需要再嘗試在你的finally塊中捕獲。此外,catch塊允許有多個異常,以避免重複代碼。 – 2012-04-11 23:16:49

+0

您是否嘗試Google? – 2012-04-11 23:17:17

回答

51

它在Java 7中添加。它被稱爲try-with-resources聲明。

/編輯

不妨把它放在這裏。您可以使用try-與資源語句來管理Lock■如果您使用的是包裝類是這樣的:

public class CloseableLock implements Closeable { 
    private final Lock lock; 

    private CloseableLock(Lock l) { 
     lock = l; 
    } 

    public void close() { 
     lock.unlock(); 
    } 

    public static CloseableLock lock(Lock l) { 
     l.lock(); 
     return new CloseableLock(l); 
    } 
} 

try(CloseableLock l = CloseableLock.lock(lock)) { // acquire the lock 
    // do something 
} // release the lock 

不過,既然你要聲明一個變量爲每一個資源,這樣做的好處是值得商榷的。

+5

+1「不妨把它扔到這裏」 – WaelJ 2012-09-07 10:58:13

+0

「不妨把它扔在這裏」 - 這是什麼意思? – user3705478 2017-02-22 12:05:15

6

這些都是在JDK7中引入的更改。

第一條語句是一個試用資源。我不知道它們爲什麼存在,但異常往往是由輸入流等引起的,我猜它只是提高了可讀性。編輯:感謝其他應答者,我讀了javadoc和我現在知道,它會關閉實現AutoCloseable所有的I/O流,省略了需要一個finally塊在很多情況下

二是多catch,當你處理完全相同的異常時,這非常方便。

+2

只要使用它們:**然後**他們存在的目的將變得清晰。 – 2012-04-11 23:24:25

1

它被稱爲試用資源。這是一種方法,不必隨意清理,因爲語言會爲你做。

0

這是與資源嘗試調用。在嘗試使用資源時,在try語句完成之後,資源部分中聲明的任何類型的可關閉流都將被關閉。所以它幾乎是一個

try{ 
InputStream is; 
//Stuff 
}finally{ 
is.close() 
} 
+0

它實際上比這更多,它也以定義的方式處理'close()'調用中的異常。如果它只是*這個,那麼幾乎沒有理由介紹它。 – 2012-04-12 07:58:52

0

它被添加到Java 7中。它被稱爲嘗試與資源。試用資源語句功能是在java 7版本中引入的。嘗試使用資源語句是一個聲明一個或多個語句的try語句。資源是程序結束後必須關閉的對象。

在java 7之前,我們使用finally塊關閉我們在程序中使用的資源。在finally塊中,我們必須手動關閉我們在程序中使用的所有資源。 欲瞭解更多信息,您可以訪問try with resources