什么是Java中的try catch中的圆括号/括号()

Par*_*osh 29 java try-catch parentheses

据我所知,我们使用try catch如下:

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

但在我发现的代码中

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
}
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么这个括号()在尝试之后.

它的用途是什么?它是Java 1.7中的新功能吗?我可以在那里写什么样的语法?

还请参考一些API文档.

Pra*_*kar 38

尝试使用资源语法,这是java 1.7中的新增功能.它用于声明可以关闭的所有资源.这是官方文档的链接. 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();
}
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,try-with-resources语句中声明的资源是BufferedReader.声明语句出现在try关键字后面的括号内.Java SE 7及更高版本中的BufferedReader类实现了java.lang.AutoCloseable接口.因为BufferedReader实例是在try-with-resource语句中声明的,所以无论try语句是正常完成还是突然完成(由于BufferedReader.readLine方法抛出IOException),它都将被关闭.

  • 根据我的理解,现在阅读你的推荐文档后,它试图省略finally bock,我们需要再次尝试处理异常来关闭资源.很好,有些时候我觉得很糟糕,当我写另一个尝试抓住最终处理问题. (4认同)