В книге Джошуа Блоха «Эффективная Java», пункт 7 второго издания, он советует избегать использования окончательных утверждений, в частности, для закрытия файлов, он говорит: «Это серьезная ошибка, зависящая от финализатора для закрытия файлов». Две страницы позже он говорит, что один из этих двух случаев применения, где он является законным в явном шаблон метода терминацииФинализаторы, закрывающие файлы и потоки
Foo foo = new Foo();
try{
///process foo
} finally{
foo.terminate();
}
Классы, имеющие метод терминации включают FileInputStream и FileOutputStream. Значит, не означает ли это закрытие файла в заявлении finally?
1) Является ли статья Джошуа Блоха 7 противоречивой?
2) Требуется ли шаблон метода завершения? Не можете ли вы написать код выше, без выражения finally, которое будет иметь тот же эффект?
финализаторы! = Наконец – Perception
'InputStream' не способ прекратить. Возможно, вы имеете в виду метод 'close()' из интерфейса 'Closeable'. –