Я изучаю онлайн-курс java, Введение в программирование с использованием Java.
В главе о вводе-выводе приведен следующий код со следующим утверждением:
Кстати, в конце этой программы вы найдете наш первый полезный пример предложения finally в инструкции try. Когда компьютер выполняет оператор try, команды в его предложении finally гарантированно выполняются независимо от того, что.
Программа находится в конце раздела 11.2.1 и представляет собой простую программу, которая просто считывает некоторые числа из файла и записывает их в обратном порядке.
Соответствующий код в основном методе (данные - это Reader, а результат - Writer):
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();
}
Итак, мне было интересно, почему предложение finally было полезно в этом случае, когда нет других точек выхода из предложений try или catch. Не могли ли тесные методы просто оказаться в главном корпусе?
Я подумал, что, возможно, это было потому, что теоретически может быть какое-то другое исключение RuntimeException, которое может привести к сбою программы, а затем оставить читателей и писателей незакрытыми, но тогда не будет ли факт, что программа все равно повредила их?