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

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



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



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



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




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

回答



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


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



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

文章翻译自Stack Overflow:https://stackoverflow.com/questions/171952/is-there-a-destructor-for-java
本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接

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

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

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

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

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

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

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

文章翻译自Stack Overflow:https://stackoverflow.com/questions/171952/is-there-a-destructor-for-java

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论

打赏作者

Gogo-2020

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值