В AutoCloseable есть метод «Исключение при закрытии по недействительным значениям». Некоторые предлагают расширить этот интерфейс, переопределить метод close и удалить исключение.
Ссылка, которую вы разместили, не предполагает, что в общем случае она показывает, почему пакет io
имеет свой собственный интерфейс Closeable
, который выдает только IOException
(потому что ему не нужно бросать более общий Exception
.) Это делает нулевую разницу во время выполнения, оно чисто на месте, поэтому выдается ошибка компилятора, если что-то пытается выдать что-то, что не исключение IOException при использовании интерфейса io.Closeable
.
Но когда я забываю поместить оператор в оператор try-with-resources, это метод close, а не вызывается?
Вы, похоже, подразумеваете здесь ссылку, где ее нет - тип исключения, которое может выдать AutoCloseable
, на самом деле не имеет ничего общего с закрытым ресурсом, который он оборачивает.
В try-with-resources закрытие называется
Да, в этом весь смысл языковой функции.
В потоке API закрытие называется
Нет, если вы не заключите его в блок с ресурсами.
Автоматически по Java, когда, например, выход из метода, в котором создается ресурс ???
Нет, если вы забудете закрыть ресурс, он просто останется открытым.
(Единственное исключение из этого правила - это когда ресурс закрывается в финализаторе, который выполняется непосредственно перед сборкой мусора. На это, безусловно, не стоит полагаться, просто (иногда) он используется как запасной вариант.)