Java 是否有用于 Java 的析构函数?

Java 是否有用于 Java 的析构函数?我似乎找不到任何关于此的文档。如果没有,我怎么能达到同样的效果?

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

作为一名C /C++程序员,我认为这很容易实现。(因此,我计划最后实现它。我构建了我的程序,使得所有“可重置”对象都在同一类中,这样我就可以在按下重置按钮时销毁所有“活动”对象。

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


答案 1

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

有一个继承的方法叫做 ,但这完全由垃圾回收器自行决定调用。因此,对于需要显式整理的类,约定是定义一个 close 方法,并且仅将 finalize 用于健全性检查(即,如果尚未调用 close,请立即执行并记录错误)。finalize

最近有一个问题引发了对finize的深入讨论,因此如果需要,应该会提供更多的深度......


答案 2

请查看“使用资源试用”语句。例如:

try (BufferedReader br = new BufferedReader(new FileReader(path))) {
  System.out.println(br.readLine());
} catch (Exception e) {
  ...
} finally {
  ...
}

在这里,不再需要的资源在方法中释放。您可以创建自己的类来实现并以类似的方式使用它。BufferedReader.close()AutoCloseable

此语句比代码结构方面更受限制,但同时它使代码更易于理解和维护。此外,无法保证在应用程序的实时时间内调用方法。finalizefinalize