除了上面的答案,这是 Java 9 中添加的改进。
Java 9 try-with-resources 改进了编写代码的方式。现在您可以在 try 块之外声明变量并直接在 try 块中使用它们。因此,您将获得以下好处。
- 它在 try 之外声明的资源(实际上是 final 或 final)可以通过自动资源管理自动关闭,只需将它们添加到 try 块中。
- 您无需重新引用在 try 块之外声明的对象,也无需像在 Java 7 中那样手动关闭它们。
- 它还有助于编写干净的代码。
try-with-resource 我们可以在 Java 9 中这样写吗?
public void loadDataFromDB() throws SQLException {
Connection dbCon = DriverManager.getConnection("url", "user", "password");
try (dbCon; ResultSet rs = dbCon.createStatement().executeQuery("select * from emp")) {
while (rs.next()) {
System.out.println("In loadDataFromDB() =====>>>>>>>>>>>> " + rs.getString(1));
}
} catch (SQLException e) {
System.out.println("Exception occurs while reading the data from DB ->" + e.getMessage());
}
}
这里自动资源管理将自动关闭对象 dbCon 和 rs。
为了更好地理解上述定义用例列表,请查找一些 Java 7 代码。
示例 1:
public void loadDataFromDB() throws SQLException {
Connection dbCon = DriverManager.getConnection("url", "user", "password");
try (ResultSet rs = dbCon.createStatement().executeQuery("select * from emp")) {
while (rs.next()) {
System.out.println("In loadDataFromDB() =====>>>>>>>>>>>> " + rs.getString(1));
}
} catch (SQLException e) {
System.out.println("Exception occurs while reading the data from DB ->" + e.getMessage());
} finally {
if (null != dbCon)
dbCon.close();
}
}
示例 2:
// BufferedReader is declared outside try() block
BufferedReader br = new BufferedReader(new FileReader("C://readfile/input.txt"));
try (BufferedReader inBr = br) {
// ...
}
} catch (IOException e) {
// ...
}
在上面的示例中,您可以查看对象是否在外面尝试然后我们需要手动关闭或重新引用它。同样,在 try 块中有多个对象的情况下,它看起来很混乱,即使您在 try 中声明,也不能在 try 块之外使用。