try-with-resources Statement 以下是来自Java Docs
的示例static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br =
new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
根据文件,
try-with-resources语句确保在语句结束时关闭每个资源。
我的问题是, 为什么我需要在try关键字后立即在括号内声明资源。 (如上面的BuffereReader)
BuffereReader实现java.lang.AutoCloseable
那么为什么不支持这样的事情,
static String readFirstLineFromFile(String path) throws IOException {
try{
BufferedReader br =
new BufferedReader(new FileReader(path))
return br.readLine();
}
}
只是在尝试之后隐式关闭资源对象。 (因为它实现了AutoCloseable)
我只是想了一下,为什么要改变语法。
请正确阅读问题,仅关于语法。
答案 0 :(得分:6)
在某些情况下,您不希望立即关闭AutoCloseable
资源。例如:
static BufferedReader getBufferedReader(String path) {
try{
FileReader fr = new FileReader(path);
return new BufferedReader(fr);
}
catch(IOException ex) {
// handle somehow
}
}
在这种情况下,您无法在fr
块退出时关闭try
。否则返回的BufferedReader
将无效。因此,您应该明确指定何时关闭资源。这就是发明特殊语法的原因。
答案 1 :(得分:3)
因为它会改变现有程序的语义。这个新功能需要一种新的语法。