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();
    }
}

これは、オブジェクトへの参照がなくなったと判断したときに、ガベージ コレクターによって呼び出されます。

だからあなたがするとき

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 に答える