JAVA基础篇 之 finalize()方法的作用

2022-12-31,,,,

我们知道java有垃圾回收器负责回收无用对象占据的内存资源,但也有特殊情况:假设你的对象(并非使用new)获得了一块特殊的内存区域,由于垃圾回收器只知道回收那些经由new分配的内存,所以它不知道如何释放该对象的这块特殊的内存。为了应对这种特殊情况,java允许在类中定义一个名为finalize()的方法。它的工作原理假定是这样的:一旦垃圾收集器准备释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存,所以如果你打算用finalize(),就能在垃圾回收时刻做一些重要的清理动作。-----------《think in java》

​ 我先说下我理解的重要的几点:

    finalize()方法会在对象被回收前调用

    不建议使用finalize()方法

    finalize()的唯一的,不常用的作用就是在对象被回收前做一些检测,去发现一些程序的缺陷:

    代码如下:

    public class Test {
    public static void main(String[] args) {
    Book b = new Book(true);
    b.checkIn();
    new Book(true);
    System.gc();
    } static class Book {
    boolean checkout = false; Book(boolean checkout) {
    this.checkout = checkout;
    } void checkIn() {
    checkout = false;
    } @Override
    protected void finalize() throws Throwable {
    if (checkout) {
    System.out.println("该对象状态异常,应该先checkIn才能被收回");
    }
    }
    } }

    ​ 在上面的例子中,所有的Book对象在被当作垃圾回收前都应该被checkIn,但在main()方法中,由于我们的疏忽,导致有一本书未被checkIn。要是我们没在finalize()方法中验证的话,很难发现这种错误。

JAVA基础篇 之 finalize()方法的作用的相关教程结束。

《JAVA基础篇 之 finalize()方法的作用.doc》

下载本文的Word格式文档,以方便收藏与打印。