Есть ли в справке действительная ссылка?(поскольку оператор выполнен успешно, но следующий оператор не выполнен)
Дело не в этом.Поле fis
не существует после того, как конструктор «оставлен» из-за этого исключения.Но объект , на который ссылается fis
, все еще существует.
Пока не начнет работать сборщик мусора. Когда GC удалит этот объект FileInputStream, он также вернет соответствующий файл.дескриптор базовой ОС (см. здесь для получения более подробной информации).
Реальная выгода здесь: вы не представляете, когда GC включится, чтобы вернуть файлсправиться.
Таким образом, вы можете либо сделать то, что предлагает ответ (чтобы сделать попытку перехватить второй вызов, и иметь fis.close()
в блоке перехвата).Или вы рассматриваете другие способы решения этой проблемы, например, с помощью , а не , когда такие сложные операции выполняются в конструкторе объекта.