Существует много методов для finalize (), которые, откровенно говоря, много писать, но вкратце:
Объект находится в завершенном состоянии, если он все еще недоступен после того, как был запущен его метод завершения, если таковой имеется. Завершенный объект ожидает освобождения. Обратите внимание, что реализация виртуальной машины управляет запуском финализатора. Вам почти всегда лучше проводить собственную очистку, чем полагаться на финализатор. Использование финализатора также может оставить критические ресурсы, которые не будут восстановлены в течение неопределенного периода времени.
В вашем случае причина, по которой он не печатается, заключается в том, что вы не знаете, когда поток финализатора вызовет метод finalize (). Происходит то, что программа завершает работу, прежде чем что-либо может быть напечатано. Чтобы проверить это:
отредактируйте код внутри основного кода с помощью (ПРИМЕЧАНИЕ: это не является гарантией, и вы не должны полагаться на него, но все же оно печатает некоторое время)
for(int i =0;i<1000000;i++)
{
MultipleConstruct construct = new MultipleConstruct(3);
construct = null;
}
Существует множество недостатков использования finalize (), от необходимости тратить больше времени на создание объекта до возможности утечки памяти и ее истощения. Если вы строго ссылаетесь на один и тот же объект внутри finalize (), то он никогда не вызывается во второй раз и, таким образом, может оставить систему в нежелательном состоянии и т. Д. И т. Д. И т. Д.
Единственное место, где вы должны использовать finalize (), - это сеть безопасности для утилизации любых ресурсов, таких как InputStream использует его для закрытия (что, опять же, не гарантирует, что он будет запущен, когда ваша программа еще жива). Еще одно место, где его можно использовать, это использование туземцев, где сборщик мусора не имеет контроля.
Для получения дополнительной информации посетите:
http://jatinpuri.com/?p=106