如何定义析构函数?

ema*_*ema 6 java oop destructor

    public class A {

    double wage;

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

    }
Run Code Online (Sandbox Code Playgroud)

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

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

小智 7

在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
  }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Book instance is getting destroyed
Run Code Online (Sandbox Code Playgroud)

System.gc()的

运行垃圾收集器.调用gc方法表明Java虚拟机花费了大量精力来回收未使用的对象,以使其当前占用的内存可用于快速重用.当控制从方法调用返回时,Java虚拟机已尽最大努力从所有丢弃的对象中回收空间.

调用System.gc()实际上等同于调用:

调用Runtime.getRuntime().GC()

对象#的finalize()

当垃圾收集确定没有对该对象的更多引用时,由对象上的垃圾收集器调用.子类重写finalize方法以处置系统资源或执行其他清理.