-3

i want to call destructor, when i close object, but i dont know how or when,.. I try whit finalize but its not calling. I dont know why

There is example code, i try with debugger but its help me..

class tralala(){ 

    int i=0;

    tralala(){
    i=i+1;}
    protected void finalize( ){
      i=i-1;
    }}

But it isnt call i dont know why. If anyone have got a suggestion plis help me. I am in the stuck at the moment, but i am not shure if java has got destructors.

4

5 回答 5

2

我认为您正在尝试实现类似的行为,例如析构函数。由于 Java 中没有析构函数,我认为您正在尝试使用 finalize。

但是当一个对象即将被垃圾回收时,会调用 finalize 方法。这可以在它有资格进行垃圾收集之后的任何时间。请注意,一个对象完全有可能永远不会被垃圾收集(因此永远不会调用 finalize)。这可能发生在对象永远不符合 gc 条件(因为它在 JVM 的整个生命周期内都可以访问)或者在对象变得符合条件和 JVM 停止运行之间实际上没有运行垃圾收集时(这通常发生在您的程式)。


阅读有关Java 中何时调用 finalize() 方法的更多信息?以及为什么不在 java 中使用 finalize() 方法


并阅读如何在 Java SO QA 中为您的解决方案实现对象计数器。这用于对象计数器。您可以使用相同的逻辑。

于 2013-09-30T09:55:33.857 回答
2

方法 finalize()“当垃圾收集器确定不再有对该对象的引用时,由垃圾收集器调用该对象”。所以它会在垃圾收集器观察到它删除后调用,而不是在对象离开作用域时立即调用。

我不明白你是什么意思作为“关闭对象”?您应该找到一些其他架构解决方案来做您想做的事情:当对象离开范围(“关闭对象”)时,可能只是调用您的方法或使用提供的处理程序引发一些自定义事件。

于 2013-09-30T10:00:15.390 回答
1

这取决于您对关闭课程的定义。

您可以实现接口Closable以便 Eclipse 可以警告您在需要时不要关闭实例。

它与 finalize 不同,因为您需要自己调用它。

您可以在 finalize 函数中调用 close() ,以确保在实例被 GC'ed 时调用它。

于 2013-09-30T09:53:38.813 回答
1

JAVA 没有析构函数。JAVA 有垃圾收集器。垃圾收集器作为线程运行并自动销毁没有任何活动引用的实例。

于 2013-09-30T09:50:46.923 回答
1

java中没有析构函数

class Tralala(){ 

    int i=0;

    Tralala(){
    i=i+1;}

    protected void reset( ){
      i=i-1;
    }}

reset当你想破坏时调用方法。

附带说明:您的代码中有很多更正,例如命名约定、格式以及提供修饰符。

而且我没有得到,当 finalize 被调用时,您的实例不再存在。为什么你在那个时候重置,从那以后不再对那个对象进行操作。

于 2013-09-30T09:49:05.860 回答