2016-06-02 16 views
6

Zgodnie jako mojej wiedzy używamy try catch następująco:Co jest nawiasach okrągłych/nawiasy() w try catch w Javie

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

Ale w kodzie znalazłem następujący

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 
} 

jestem nie jest w stanie zrozumieć, dlaczego to nawiasy po prostu jest ().

Co to jest? Czy to nowość w Javie 1.7? Jaką składnię mogę tam napisać?

Proszę również przekazać mi dokumenty API.

+0

Możliwy duplikat [Czy używam Java try-with-resources poprawnie] (http://stackoverflow.com/questions/17650970/am-i-using-the-java-7-try-with -resources-poprawnie) –

+0

Pytasz, co to jest, połączyłem z pytaniem nie tylko to, co to jest, ale także jak poprawnie go używać. –

Odpowiedz

13

Jest to próba z użyciem składni Zasoby, która jest nowa w java 1.7. Służy do deklarowania wszystkich zasobów, które można zamknąć. Oto link do oficjalnej dokumentacji. 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(); 
} 
} 

W tym przykładzie zasób zadeklarowane w try-with-zasobów rachunku jest BufferedReader. Deklaracja deklaracji pojawia się w nawiasach bezpośrednio po słowie kluczowym try. Klasa BufferedReader, w języku Java SE 7 i nowszych wersjach, implementuje interfejs java.lang.AutoCloseable. Ponieważ instancja BufferedReader jest zadeklarowana w instrukcji try-at-resource, zostanie zamknięta bez względu na to, czy instrukcja try działa normalnie, czy też gwałtownie (w wyniku metody BufferedReader.readLine wyrzucającej wyjątek IOException).

+1

Zgodnie z moim zrozumieniem po przeczytaniu Twojej dokumentacji, Próbuje ona w końcu pominąć bock, w którym musimy ponownie spróbować poradzić sobie z wyjątkiem, aby zamknąć zasób. Miło, kilka razy czułem się źle, gdy piszę kolejną próbę złapać wewnątrz w końcu, aby poradzić sobie z problemem. –