LINUX.ORG.RU

[java]finalize

 


0

0

Помогите плиз, объясните где я туплю ?
Не могу заставить вызываться finalize():

$ cat example.java
import java.io.*;

class TTest
{
public TTest()
{
System.out.println("TTest()");
}

protected void finalize() throws Throwable
{
System.out.println("~TTest()");
File file = new File("/tmp/finalize");
file.createNewFile();
}

public void f()
{
System.out.println("TTest.f()");
}
}

class example
{
static public void main(String[] args)
throws Throwable
{
TTest a = new TTest();
a.f();
}
}

$ javac example.java
$ java example
TTest()
TTest.f()

Какого черта не вызывается finalize() ?
Думал может System уже дохлый к моменту вызова, так и файл не создается... Что не так в этом примере ???


вызови нарочно сборку мусора, System.gc(); вроде бы так

К сведению с finalize обращаться нужно осторожно, за подробностями в гугл, но вкратце т.к. java - managed environment, то о том, когда наступит расщипление объекта мы не можем делать никаких предположений.

help_us
()
Ответ на: комментарий от help_us

вообщем в java нет деструкторов. точнее finalize есть и даже иногда когда памяти не хватает оно вызывается, но необязательно... вообщем функция есть, но работа ее не гарантируется... я все понимаю - сборщик мусора, не знаешь сколько будет жить объект, но при завершении программы можно деструктор вызвать то ??? шиш. может и вызовется, но может и нет. я экспериментировал - создавал тысячи объектов - количество вызываемых деструкторов при каждом запуске тестовой программы разное. вообщем в java нет деструкторов.

xtron
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.