当前位置: 首页 > 面试题库 >

什么时候在Java中调用finalize()方法?

巫马泰
2023-03-14
问题内容

我需要知道何时在finalize()中调用该方法JVM。我创建了一个测试类,该finalize()方法通过覆盖该方法来在调用该方法时将其写入文件。它不执行。谁能告诉我它为什么不执行的原因?


问题答案:

通常,最好不要依赖finalize()进行任何清理等工作。

根据Javadoc(值得阅读),它是:

当垃圾回收确定不再有对该对象的引用时,由垃圾回收器在对象上调用。

正如Joachim指出的那样,如果对象始终是可访问的,则在程序生命中可能永远不会发生这种情况。

同样,不保证垃圾收集器在任何特定时间运行。总的来说,finalize()除非你有特定的需求,否则我想说的可能不是最好的通用方法。



 类似资料:
  • (1)重载是多态的集中体现,在类中,要以统一的方式处理不同类型数据的时候,可以用重载。 (2)重写的使用是建立在继承关系上的,子类在继承父类的基础上,增加新的功能,可以用重写。 (3)简单总结: 重载是多样性,重写是增强剂; 目的是提高程序的多样性和健壮性,以适配不同场景使用时,使用重载进行扩展; 目的是在不修改原方法及源代码的基础上对方法进行扩展或增强时,使用重写; 生活例子: 你想吃一碗面,我

  • 问题内容: 我阅读的所有资料都提到了几个案例,并以“其他一些案例”作了总结。在视图/活动中调用onSaveInstanceState方法时,所有情况是什么? 问题答案: 该文档称 在活动被杀死之前将调用此方法,以便将来在将来返回某个时间时可以恢复其状态。

  • 自己写的service可以调basemapper也可以掉mybatis-plus中的service,有没有统一的规则?

  • 问题内容: 我怕可变参数。我不知道该怎么用。 另外,让人们随心所欲地传递争论是很危险的。 什么样的上下文示例将是使用它们的好地方? 问题答案: 对于需要处理不确定数目的对象的任何方法,Varargs都是有用的。一个很好的例子是。格式字符串可以接受任意数量的参数,因此你需要一种机制来传递任意数量的对象。

  • 当我们不知道任何给定对象的finalize()方法何时可以运行时,我们需要在java中重写finalize()方法的哪里?我们可以在finalize()中关闭什么类型的资源?GC调用finalize()方法的最佳机会是什么?

  • 问题内容: 在Java中,以下代码有或没有什么区别? 该文档说:“此方法永远不会正常返回。” 这是什么意思? 问题答案: 可以用于在程序退出之前运行关机钩子。这是处理大型程序中关闭程序的便捷方法,在该程序中,程序的所有部分都无法(也不应该)相互了解。然后,如果有人要退出,他可以简单地调用,然后关闭挂钩(如果设置正确)将负责执行所有必要的关闭仪式,例如关闭文件,释放资源等。 “此方法永远不会正常返回