java中是否有析构函数来反对构造函数?

时间:2015-06-24 07:10:19

标签: java constructor

由于Java编程具有在实例化新对象时运行代码的构造函数,所以我很好奇是否有某些东西可以解决这个问题。创建新对象会占用内存,因此Java中是否存在擦除或覆盖未使用内存的机制?

如果Java中有析构函数,那么它与C等编程语言中的其他内存管理系统有何不同?

2 个答案:

答案 0 :(得分:3)

您可以覆盖finalize

中定义的java.lang.Object方法

无法保证在您的程序运行期间调用finalize方法!看看JavaDoc吧!因此,在大多数情况下,覆盖'finalize'不是一个好主意。

如果你需要清理资源,你可以使用'try / finally'语句,或者如果你使用像'Spring'这样的框架,框架提供了一些钩子(例如@PreDestroy

顺便说一句:在java中你无法主动擦除或覆盖内存区域,这是由垃圾收集器完成的。

答案 1 :(得分:1)

在java中,用于擦除与代码中没有任何引用(称为垃圾)的对象一起使用的内存,有一种叫做垃圾回收器的机制。 JVM在必要时调用它,但您可以通过System.gc()调用它。

作为构造函数的计数器(这是在对象实例化时执行的一些代码),有一个finalize方法,当对象进行垃圾收集时执行。

您可以覆盖它(在Object类中定义)。