【问题标题】:What is Round brackets / parentheses () in try catch in JavaJava中try catch中的圆括号/括号()是什么
【发布时间】:2016-10-01 16:41:14
【问题描述】:

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

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

但在我发现以下代码中

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
}

我不明白为什么这个括号 () 在尝试之后。

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

还请参考我一些 API 文档。

【问题讨论】:

标签: java try-catch parentheses


【解决方案1】:

尝试使用 Java 1.7 中新增的 Resources 语法。它用于声明所有可以关闭的资源。这是官方文档的链接。 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();
}
}

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

【讨论】:

  • 根据我的理解,在阅读了您提到的文档后,它会尝试省略 finally bock 我们需要再次尝试处理异常以关闭资源的地方。很好,当我在 finaly 中写另一个 try catch 来处理这个问题时,有时我感觉很糟糕。
  • 这是否适用于数据库对象、PreparedStatement、ResultSet?
  • @jpruiz114 是的。他们将与两者一起工作。因为这些类实现了AutoClosable 接口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
  • 1970-01-01
相关资源
最近更新 更多