2016-06-02 17 views
6

Gemäß wie mein Wissen wir try catch wie folgt verwenden:Was ist Runde Klammern/Klammern() in Try-Catch in Java

try { 
    //Some code that may generate exception 
} 
catch(Exception ex) { 
} 
    //handle exception 
finally { 
    //close any open resources etc. 
} 

Aber in einem Code, den ich

try(
    ByteArrayOutputStream byteArrayStreamResponse = new ByteArrayOutputStream();     
    HSLFSlideShow pptSlideShow = new HSLFSlideShow(
             new HSLFSlideShowImpl(
Thread.currentThread().getContextClassLoader() 
     .getResourceAsStream(Constants.PPT_TEMPLATE_FILE_NAME) 
            )); 
){ 
} 
catch (Exception ex) { 
     //handel exception 
} 
finally { 
     //close any open resource 
} 

folgenden fand ich bin nicht in der Lage zu verstehen, warum diese Klammern () gleich nach dem Versuch.

Was ist die Verwendung davon? Ist es neu in Java 1.7? Welche Art von Syntax kann ich dort schreiben?

Bitte beziehen Sie sich auch auf einige API-Dokumente.

+0

Mögliches Duplikat von [Ich benutze die Java 7-Probelieferung richtig] (http://stackoverflow.com/questions/17650970/am-i-using-the-java-7-try-with -resources-korrekt) –

+0

Sie fragen, was es ist, ich habe zu einer Frage nicht nur verknüpft, was es ist, sondern auch, wie man es richtig benutzt. –

Antwort

13

Es ist versuchen, mit Ressourcen-Syntax, die in Java 1.7 neu ist. Es wird verwendet, um alle Ressourcen zu deklarieren, die geschlossen werden können. Hier ist der Link zur offiziellen Dokumentation. https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

static String readFirstLineFromFile(String path) throws IOException { 
try (BufferedReader br = 
       new BufferedReader(new FileReader(path))) { 
    return br.readLine(); 
} 
} 

In diesem Beispiel wird die Ressource in try-mit-Ressourcen-Anweisung deklariert ist ein BufferedReader. Die Deklarationsanweisung wird unmittelbar nach dem Schlüsselwort try in Klammern angezeigt. Die Klasse BufferedReader implementiert in Java SE 7 und höher die Schnittstelle java.lang.AutoCloseable. Da die BufferedReader-Instanz in einer try-with-resource-Anweisung deklariert ist, wird sie geschlossen, unabhängig davon, ob die try-Anweisung normal oder abrupt ausgeführt wird (als Ergebnis der Methode BufferedReader.readLine, die eine IOException auslöst).

+1

Nach meinem Verständnis jetzt nach dem Lesen Ihrer verwiesenen Dokumentation, es versuchen, schließlich bock, wo wir einen weiteren Versuch, die Ausnahme zu behandeln, um die Ressource zu schließen versuchen. Schön, manchmal habe ich mich schlecht gefühlt, als ich einen weiteren Versuch schreibe, um endlich das Problem zu lösen. –