Java 有析构函数吗?

43 浏览
0 Comments

Java 有析构函数吗?

Java 有析构函数吗?我好像找不到任何关于这方面的文档。如果没有,我该如何实现相同的效果?

为了让我的问题更具体,我正在编写一个处理数据的应用程序,规范中要求有一个“重置”按钮,将应用程序恢复到刚启动时的原始状态。然而,所有的数据都必须是“活动的”,除非应用程序关闭或按下重置按钮。

通常是 C/C++ 程序员的我认为这应该很容易实现。(因此我计划最后再实现它。)我将程序结构化,使得所有可重置的对象都在同一个类中,这样当按下重置按钮时,我就可以销毁所有“活动”的对象。

我在想,如果我只是取消引用数据并等待垃圾回收器收集它们,如果我的用户重复输入数据并按下重置按钮,那么不会有内存泄漏吗?我也在思考,既然 Java 作为一种语言相当成熟,应该有一种方法来防止这种情况发生或者优雅地解决这个问题。

admin 更改状态以发布 2023年5月22日
0
0 Comments

由于 Java 是一种垃圾收集的语言,你不能预测对象何时(甚至是否)被销毁。因此没有直接等价于析构函数的方法。

有一个继承方法叫做 finalize,但这完全取决于垃圾回收器。所以对于需要显式清理的类,约定是定义一个 close 方法,仅在 finalize 中进行检查(即如果未调用 close,则立即调用它并记录一个错误日志)。

最近出现了一个引发深入讨论 finalize 的问题,因此如果需要更深入的了解,可以参考该讨论。

0