2016-06-02 37 views
6

Come per la mia conoscenza usiamo try catch come segue:Ciò che è tra parentesi tonde/parentesi() nel tentativo di cattura in Java

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

Ma in un codice che ho trovato seguendo

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 
} 

Sono non è in grado di capire perché questa parentesi tocchi () subito dopo la prova.

Qual è l'utilizzo di esso? È nuovo in Java 1.7? Che tipo di sintassi posso scrivere lì?

Si prega di fare riferimento anche a me alcuni documenti API.

+0

Possibile duplicato di [sto utilizzando correttamente Java-try-with-resources] (http://stackoverflow.com/questions/17650970/am-i-using-the-java-7-try-with -risorse-correttamente) –

+0

Stai chiedendo di cosa si tratta, ho collegato a una domanda non solo quello che è, ma anche come usarlo correttamente. –

risposta

13

Si prova con la sintassi Resources che è nuova in java 1.7. È usato per dichiarare tutte le risorse che possono essere chiuse. Ecco il link alla documentazione ufficiale. 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 questo esempio, la risorsa esposto nella dichiarazione try-with-risorse è un BufferedReader. L'istruzione dichiarazione appare tra parentesi immediatamente dopo la parola chiave try. La classe BufferedReader, in Java SE 7 e successive, implementa l'interfaccia java.lang.AutoCloseable. Poiché l'istanza BufferedReader viene dichiarata in un'istruzione try-with-resource, verrà chiusa indipendentemente dal fatto che l'istruzione try venga completata normalmente o in modo brusco (come risultato del metodo BufferedReader.readLine che genera una IOException).

+1

Secondo quanto ho capito ora dopo aver letto la tua documentazione di riferimento, prova ad omettere finalmente bock dove dobbiamo fare un altro tentativo per gestire l'eccezione per chiudere la risorsa. Bello, alcune volte mi sono sentito male quando scrivo un altro tentativo di catturare definitivamente per risolvere il problema. –