Java 到底有没有析构函数呢?| Java Debug 笔记

310 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接

Java 到底有没有析构函数呢?

Java 到底有没有析构函数呢?我没能找到任何有关找个的文档。如果没有的话,我要怎么样才能达到一样的效果?

为了使得我的问题更加具体,我写了一个应用程序去处理数据并且说明是有一个重置的按钮会使得应用程序重新回到启动前的状态的。但是所有数据都必须是存活着的除非这个应用程序已经关闭了,或者重置的按钮被按下了。

如果是一个C/C++程序员,我认为这个是很容易实现的(因此我计划后面去实现它)我设计我的程序的结构,使得所有可以被重置的对象都在同一个类里面,为了我可以毁灭掉所有存活的对象当那个重置的按钮一按下。

我在思考如果我只是取消引用,等待垃圾回收器去回收它们,会不会产生内存泄漏呢?如果我频繁的输入数据又按下重置的按钮。无意中想Java已经是一个非常成熟的语言了,它可能有办法阻止这种情况的发生或者优雅地处理掉。

回答

因为java是一门有垃圾回收的语言,你不能预测一个对象什么时候被回收。因此也就没有直接等价的析构函数。

有一个叫 finalize的继承方法,但是这个它的调用完全是由垃圾回收器决定的。所以需要明确需要清理的类,惯例是定义在一个关闭方法里面,并且使用finalize方法只是为了完整性检查。(如果关闭方法没有被调用,就立即执行finalize并且把错误写入日志)

最近一个问题引发了对finalize的深度讨论,如果你想更加深入的话,可以去看看

文章翻译自Stack Overflow:stackoverflow.com/questions/1…