0

我有一个 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中完成感到困惑?

-鲍勃·兰伯特-

4

1 回答 1

0

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

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

当垃圾收集器确定不再有对该对象的引用时,将调用 this

所以当你这样做的时候

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

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

作为输出你会得到

退出

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

于 2013-06-20T17:43:29.027 回答