类实例超出范围时执行的方法?

时间:2013-06-20 17:23:59

标签: java c++ migration

我有一个C ++类用于跟踪调用例程的进入和退出。

class myTrace{
    std::string  m_strName;
    myTrace( std::string strName ){
        m_strName = strName;
        _tprintf( _T("\n%s entering"), m_strName );
    };
    ~myTrace(){
        _tprintf(_T("\n%s exiting"), m_strName );
    };
};

使用起来很简单,你将它实例化为使用堆栈机制在例程中完成的第一件事。调用例程时,它会输出并输入消息。例程退出时,会打印出退出消息。

我正在尝试将其迁移到java,但是我所做的关于缺少析构函数的所有阅读让我感到困惑的是,是否有任何方法可以在java中完成?

-bob lambert -

1 个答案:

答案 0 :(得分:0)

理论上,你可以覆盖方法finalize,所以

public class MyClass {
    @Override
    protected void finalize() throws Throwable {
        System.out.println("exiting");
        super.finalize();
    }
}

当它确定没有对该对象的更多引用时,它将由垃圾收集器调用

所以当你这样做时

public static void myMethod()
{
MyClass a = new MyClass();
}

public static void main(String[] args) {
        myMethod();
        System.gc();
}

作为输出你将得到

  离开

如果我记得在C ++中析构函数用于释放内存时对象将被销毁,在java中我们不必担心这一点,GC正在为我们这样做。所以在大多数情况下你不应该真的需要destructos