サブクラスがガベージコレクションされているときに、親クラスのfinalize()
が呼び出されることが保証されていない(どこか)ことを読んだ場合、ほとんどの開発者がサブクラスでfinalize()
をオーバーライドし、super.finalize()
を呼び出しますか?サブクラス内でsuper.finalize()を呼び出しますか?
7
A
答えて
13
スーパークラスに対してFinalizeは自動的に呼び出されません。あなたはファイナライズを上書きするのであれば、「スーパークラスを確保するための適切な方法は、
protected void finalize() {
try {
// do subclass cleanup
}
finally {
super.finalize();
}
}
それはファイナライザは非常に予測できないことに注意する必要がありますhttp://www.ibm.com/developerworks/java/library/j-jtp06294/index.html
このリファレンスの記事を参照してくださいだろうクリーンアップされますと、あなたはドン実行するかどうかを制御できます。ファイナライズの方法で重要なことはありません。一般的に、クラスの明示的なクリーンアップを実行する方が良い方法です。
3
Java以外のリソースのクリーンナップにファイナライズすることを避けるのが最善です(ファイアウォールは保証されません)。可能であれば、リソースでtry(JDK7を使用している場合)を使用するか、可能であれば他のオプションの間でリソースをクリーンアップするためにfinally節を試してください。 finalizeを使用する場合は、try. finallyブロックにsuper.finalizeを入れることができます。リソースをクリーンアップするためにファイナライズに頼るのは賢明でしょう。
// don't make it public!
protected void finalize() throws Throwable
{
try
{
// custom finalization here
}
finally
{
super.finalize();
}
}
アイデアがリソースをクリーンアップしている場合、おそらくファントム参照をチェックアウトするのが賢明だろう - それはどちらも強く/弱く/そっと到達可能である場合、オブジェクトは、想像線到達可能である、&をファイナライズされているであります少なくとも1つのファントム参照(すなわち、オブジェクトはファイナライズされていますが、まだ再生されていません)。
関連する問題
- 1. サブクラスでスーパークラス呼び出しをモック/テストできますか?
- 2. サブクラスからメソッドを呼び出す
- 3. UIViewサブクラスでdrawRectを呼び出す
- 4. 静的UIViewControllerサブクラス内で[super dealloc]を呼び出さない
- 5. 別のAPI呼び出し内でAPI呼び出しを行いますか?
- 6. 未知のサブクラスの呼び出しメソッド
- 7. サブクラスのスーパークラスの呼び出し関数
- 8. サブクラスのメソッドを呼び出す
- 9. UITableViewControllerサブクラスのloadViewを呼び出す
- 10. サブクラス化のメソッドQWidgetを呼び出す
- 11. Pythonスーパークラスがサブクラスを呼び出す
- 12. iOS:UIViewサブクラスのinitは[super init]を呼び出し、スーパークラスのメソッドを呼び出します。なぜ[subclass initWithFrame:xx]を呼び出すのですか?
- 13. コントローラーをサブクラス化し、いつsuperを呼び出すか
- 14. defrecordコンストラクタで呼び出しを呼び出しますか?
- 15. Swiftのinitサブクラスを呼び出すときに親コンストラクタを呼び出す
- 16. dequeueReusableCellWithIdentifier:私のUITableViewCellサブクラスで初期化子を呼び出しますか?
- 17. スーパークラスへのアクセスを持つサブクラスでの呼び出しメソッド
- 18. superClassからすべてのサブクラスを呼び出す関数
- 19. objective-c:セレクタまたは純粋な呼び出しでまだクラス内を呼び出すメソッドですか?
- 20. cherrpyアプリケーション(サイトツリー)のインポートされたサブクラス内のデコレータを呼び出せません
- 21. Log4JLoggerを拡張し、ランタイム中にサブクラスを呼び出す
- 22. サブクラスのメソッドをスーパークラスのオブジェクトから呼び出す方法は?
- 23. はサブクラスからスーパークラスのメソッドを呼び出す - JavaScriptの
- 24. サブクラスの静的メソッドを親クラスから呼び出す
- 25. サブクラス静的メソッドからジェネリックメソッドを呼び出す方法
- 26. サブクラスから関数を呼び出すスーパークラス
- 27. SQL ServerのIN句内でストアドプロシージャを呼び出しますか?
- 28. Hololensアプリ内でMicrosoft Edgeを呼び出しますか?
- 29. Rubyのシングルトンクラス内でシングルトンメソッドを呼び出しますか?
- 30. Redisキュー:ループ内でBLPOP/BRPOPを呼び出しますか?
効果的なJava項目7:ファイナライザを避ける。ファイナライザを使用する場合は、super.finalize()を呼び出す必要があります。 – assylias
サブクラスがガベージコレクトされると、スーパークラスに対してfinalize()が呼び出されますか? – user997112
私は、関連性があると思う偉大な記事:[Finalizeが保護されている理由](http://www.0xcafefeed.com/2005/09/why-is-finalize-method-protected/) –