除了以上的回答,这是Java 9中新增的改进内容。
Java 9的try-with-resources提供了一种更好的编写代码的方式。现在你可以在try块外部声明变量,并直接在try块内使用它们。由于这个改进,你将获得以下好处。
- 在try块外部声明的资源(有效地是final或final)可以通过将它们添加到try块中的自动资源管理来自动关闭。
- 你不需要重新引用在try块外部声明的对象,也不需要像在Java 7中那样手动关闭它们。
- 它还有助于编写清晰的代码。
在Java 9中,我们可以这样编写try-with-resource。
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 br = new BufferedReader(new FileReader("C://readfile/input.txt"));
try (BufferedReader inBr = br) {
}
} catch (IOException e) {
}
在上面的示例中,您可以看到如果对象在try块之外,那么我们需要手动关闭或重新引用它。而且,在try块中有多个对象的情况下,这看起来很乱,即使您在try块内声明了它,也不能在try块外使用它。