2013-03-14 3 views
1

В книге Джошуа Блоха «Эффективная Java», пункт 7 второго издания, он советует избегать использования окончательных утверждений, в частности, для закрытия файлов, он говорит: «Это серьезная ошибка, зависящая от финализатора для закрытия файлов». Две страницы позже он говорит, что один из этих двух случаев применения, где он является законным в явном шаблон метода терминацииФинализаторы, закрывающие файлы и потоки

Foo foo = new Foo(); 
try{ 
    ///process foo 
} finally{ 
    foo.terminate(); 
} 

Классы, имеющие метод терминации включают FileInputStream и FileOutputStream. Значит, не означает ли это закрытие файла в заявлении finally?

1) Является ли статья Джошуа Блоха 7 противоречивой?

2) Требуется ли шаблон метода завершения? Не можете ли вы написать код выше, без выражения finally, которое будет иметь тот же эффект?

+7

финализаторы! = Наконец – Perception

+0

'InputStream' не способ прекратить. Возможно, вы имеете в виду метод 'close()' из интерфейса 'Closeable'. –

ответ

2

Я думаю, что автор имел в виду, что вы должны использовать finally блочный код (это не финализации) в try-catch, чтобы закрыть/очистить свои ресурсы вместо освобождения от finalize метода (это финализации).

Для получения дополнительной информации о финализаторах проверить When is the finalize() method called in Java?

Смежные вопросы