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