2016-06-02 14 views
6

Theo như hiểu biết của tôi, chúng tôi sử dụng try catch như sau:Vòng ngoặc/ngoặc() trong cố gắng nắm bắt là gì trong Java

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

Nhưng trong một đoạn code tôi tìm thấy sau

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 
} 

Tôi không thể hiểu tại sao dấu ngoặc đơn này chỉ () sau khi thử.

Việc sử dụng nó là gì? Nó mới trong Java 1.7? Tôi có thể viết loại cú pháp nào?

Vui lòng tham khảo thêm một số tài liệu API.

+0

Bản sao có thể có của [Tôi có đang sử dụng Java 7 thử-với-tài nguyên chính xác không] (http://stackoverflow.com/questions/17650970/am-i-using-the-java-7-try-with -resources-correct) –

+0

Bạn đang hỏi nó là gì, tôi đã liên kết với một câu hỏi không chỉ là nó là gì, mà còn cách sử dụng nó một cách chính xác. –

Trả lời

13

Hãy thử với cú pháp Tài nguyên mới trong java 1.7. Nó được sử dụng để khai báo tất cả các tài nguyên có thể được đóng lại. Đây là liên kết đến tài liệu chính thức. 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(); 
} 
} 

Trong ví dụ này, tài nguyên được khai báo trong câu lệnh try-với-nguồn lực là một BufferedReader. Câu lệnh khai báo xuất hiện trong dấu ngoặc đơn ngay sau từ khóa thử. Lớp BufferedReader, trong Java SE 7 và sau đó, triển khai thực hiện giao diện java.lang.AutoCloseable. Bởi vì thể hiện BufferedReader được khai báo trong một câu lệnh try-with-resource, nó sẽ bị đóng bất kể câu lệnh try hoàn thành bình thường hay đột ngột (như là kết quả của phương thức BufferedReader.readLine ném một IOException).

+1

Theo hiểu biết của tôi bây giờ sau khi đọc tài liệu giới thiệu của bạn, Nó cố gắng bỏ qua cuối cùng bock, nơi chúng tôi cần phải đặt một cố gắng để xử lý các ngoại lệ để đóng tài nguyên. Tốt đẹp, một số lần tôi cảm thấy xấu khi tôi viết một thử khác bắt bên trong finaly để xử lý vấn đề. –

Các vấn đề liên quan