这个包含 close() 调用的 finally 子句的原因是什么?
我正在学习在线java课程,使用Java编程入门。
在 I/O 一章中,以下代码通过以下语句进行了介绍:
顺便说一句,在本程序结束时,您将在 try 语句中找到我们第一个有用的 finally 子句示例。当计算机执行 try 语句时,无论如何都可以保证执行其 finally 子句中的命令。
该程序位于11.2.1节的末尾,是一个简单的程序,只是从文件中读取一些数字并以相反的顺序写入它们。
main 方法中的相关代码是(数据是读取器,结果是写入器):
try {
// Read numbers from the input file, adding them to the ArrayList.
while ( data.eof() == false ) { // Read until end-of-file.
double inputNumber = data.getlnDouble();
numbers.add( inputNumber );
}
// Output the numbers in reverse order.
for (int i = numbers.size()-1; i >= 0; i--)
result.println(numbers.get(i));
System.out.println("Done!");
} catch (IOException e) {
// Some problem reading the data from the input file.
System.out.println("Input Error: " + e.getMessage());
} finally {
// Finish by closing the files, whatever else may have happened.
data.close();
result.close();
}
因此,我想知道为什么在这种情况下,当 try 或 catch 子句没有其他退出点时,finally 子句是有用的。难道关闭方法不能只是在main的主体中吗?
我想也许是因为理论上可能存在其他一些运行时异常,可以使程序崩溃,然后使Reader & Writers保持关闭状态,但是程序崩溃的事实不会关闭它们吗?