除了上述答案之外,这是Java 9中的新增功能。
Java 9 try-with-resources改进了编写代码的方式。 现在您可以在try块外声明变量并直接在try块内使用它们,因此您将获得以下好处。
只需在try块中添加它们,就可以通过自动资源管理自动关闭在try(实际上是final或final)外部声明的资源。您不需要重新引用在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块外使用。