如何定义析构函数


public class A {
double wage;
A(double wage){
this.wage=wage;
}
}

//在这段代码中,我应该定义构造函数和析构函数。

  • 定义析构函数的代码是什么

在Java中,有no destructors,但您可以使用方法Object#finalize()作为解决方案。

Java编程语言不保证哪个线程为任何给定的对象调用finalize方法。它是有保证的,但是,调用finalize的线程将不会持有任何调用finalize时,用户可见的同步锁定。如果finalize方法引发未捕获的异常,异常为忽略,该对象的终结终止。

class Book {
@Override
public void finalize() {
System.out.println("Book instance is getting destroyed");
}
}
class Demo {
public static void main(String[] args) {
new Book();//note, its not referred by variable
System.gc();//gc, won't run for such tiny object so forced clean-up
}
}

输出:

Book instance is getting destroyed

System.gc()

运行垃圾收集器。调用gc方法表明Java虚拟机致力于回收中未使用的对象以便快速使用它们当前占用的内存重新使用当控制从方法调用返回时,Java Virtual机器已尽最大努力从所有丢弃的垃圾中回收空间对象。

调用System.gc()实际上相当于调用:

Runtime.getRuntime().gc()

对象#finalize()

垃圾回收时由对象上的垃圾收集器调用确定不再有对该对象的引用。一个子类重写finalize方法以处置系统资源或执行其他清理。

编写自己的方法并使用它。不建议重写finalize方法。

最新更新