Что произойдет, если во время финализации возникнет исключение - PullRequest
5 голосов
/ 14 июня 2010

Что произойдет, если во время выполнения finalize () будет сгенерировано исключение? Стек разматывается как обычно? Продолжается ли finalize () и игнорируется ли исключение? Останавливает ли он finalize () и продолжает ли GC объект? Или что-то другое?

Я не ищу рекомендаций по использованию finalize (), там много страниц, объясняющих это.

Ответы [ 3 ]

9 голосов
/ 14 июня 2010

Из Object # finalize () javadoc:

Любое исключение, выброшенное методом finalize, приводит к остановке завершения этого объекта, но в противном случае игнорируется.

4 голосов
/ 15 июня 2010

Правильный способ кодирования финализатора, если у вас есть веская причина, чтобы написать его вообще, это:

protected void finalize() throws Throwable
{
  try
  {
    // my finalization code
  }
  finally
  {
    super.finalize();
  }
}
1 голос
/ 06 марта 2012

В случае, если будет сгенерировано исключение, вызов finalize будет прерван, и в следующий раз он не будет вызван, но объект будет GC-ed из памяти.

...