Ответ
Метод close() вызывается для освобождения ресурсов (файлы, сокеты, соединения). Механизм вызова зависит от способа работы с ресурсом.
1. Автоматический вызов в try-with-resources (рекомендовано с Java 7+):
Ресурс, объявленный в скобках try, должен реализовывать AutoCloseable. close() вызывается автоматически при выходе из блока try — как в нормальном случае, так и при возникновении исключения.
try (FileInputStream fis = new FileInputStream("file.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fis))) {
// Работа с ресурсом
System.out.println(br.readLine());
} // Здесь автоматически будут вызваны br.close(), затем fis.close()
catch (IOException e) {
// Обработка исключения
}
2. Ручной вызов в блоке finally (устаревший паттерн):
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("file.txt"));
// Работа с ресурсом
} catch (IOException e) {
// Обработка
} finally {
if (br != null) {
try {
br.close(); // Явный вызов
} catch (IOException e) {
// Логирование ошибки закрытия
}
}
}
3. Явный вызов программистом:
Socket socket = new Socket("host", port);
// ... работа
socket.close(); // Вызывается в нужный момент кода
Важно: try-with-resources гарантирует закрытие в правильном порядке (обратном порядку объявления) и подавляет исключения от close() в пользу исключений из блока try.