Для чего нужен интерфейс AutoCloseable в Java?

«Для чего нужен интерфейс AutoCloseable в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Интерфейс AutoCloseable (появился в Java 7) предназначен для автоматического управления ресурсами в конструкции try-with-resources. Он объявляет единственный метод void close() throws Exception.

Основное назначение: Гарантировать вызов метода close() для освобождения ресурсов (файлов, сетевых соединений, сокетов) даже при возникновении исключения.

Пример использования:

// Класс, реализующий AutoCloseable
class DatabaseConnection implements AutoCloseable {
    public void connect() { /* ... */ }
    @Override
    public void close() { // Будет вызван автоматически
        System.out.println("Connection closed");
    }
}

// try-with-resources автоматически закроет ресурс
public void processData() {
    try (DatabaseConnection conn = new DatabaseConnection()) {
        conn.connect();
        // Работа с данными
    } // Здесь неявно вызывается conn.close()
    // Исключения из блока try и из close() могут быть подавлены/объединены
}

Отличие от Closeable:

  • Closeable (появился раньше) расширяет AutoCloseable.
  • Его метод close() объявлен как throws IOException, в то время как AutoCloseable.close() может бросать любое Exception.
  • AutoCloseable — более общий интерфейс для любых ресурсов, а не только для I/O.