1. ホーム
  2. java

[解決済み] Javaにデストラクタはありますか?

2022-02-15 21:12:49

質問

Javaにデストラクタはありますか?これに関するドキュメントが見つからないようです。もしないのであれば、どうすれば同じ効果を得ることができるのでしょうか?

私の質問をより具体的にするために、私はデータを扱うアプリケーションを書いています。仕様書には、アプリケーションを起動したばかりの元の状態に戻す「リセット」ボタンがあるべきだと書かれています。しかし、アプリケーションを閉じたり、リセットボタンを押したりしない限り、すべてのデータは「ライブ」でなければなりません。

普段はC/C++のプログラマーなので、これは簡単に実装できるだろうと思いました。(リセット可能な」オブジェクトはすべて同じクラスにして、リセットボタンが押されたときに「生きている」オブジェクトをすべて破壊できるようにプログラムを構成しました。

もし、データの参照を解除してガベージコレクタが回収するのを待つだけだったら、ユーザーが繰り返しデータを入力してリセットボタンを押しても、メモリリークが発生しないのではと思ったのです。また、Javaは言語としてかなり成熟しているので、これを防ぐ方法、あるいは潔くこれに取り組む方法があるはずだとも考えていました。

解決方法は?

Javaはガベージコレクション言語なので、いつ(あるいはいつ)オブジェクトが破棄されるかを予測することはできません。したがって、デストラクタに直接相当するものはありません。

という継承されたメソッドがあります。 finalize しかし、これは完全にガベージコレクタの判断で呼び出されます。そこで、明示的に整理整頓をする必要があるクラスでは、慣習として 閉じる メソッドを使用し、finalize はサニティチェックのためにのみ使用します。 閉じる が呼び出されていない場合は、今すぐ呼び出してエラーを記録してください)。

がありました。 という質問があり、finalizeについて深く議論されました。 最近、このようなことがありましたので、必要であれば、より深い内容を提供できるはずです...。