java finalize 的使用

think of java p 89页

 一般不使用finalizer 方法

但是在一些情况下,它可以帮我们排除一些问题

eg:


class Book {


    boolean checkedOut = false;

    public Book(boolean checkedOut) {
        this.checkedOut = checkedOut;
    }

    public void checkedOut() {
        this.checkedOut = false;
    }

    @Override
    protected void finalize() throws Throwable {

        System.out.println("ok");
        if (checkedOut) {
            System.out.println("error");
        } else {
            System.out.println("ok");
        }
    }
}

public class Ter {


    public static void main(String[] args) {

        Book book = new Book(true);
        book.checkedOut();


        new Book(true);
        new Book(true);
        new Book(true);
        new Book(true);

        System.gc();


    }


}

结果:

ok

error

ok
error
ok
error
ok

error

可以看见,在直接使用匿名的new Book() 的方法,在调用System.gc(),的时候,他会自动调用当前没有应用的对象

尽可能的取回收空间,

在一些特许情况下,我们可以利用其这一点,判断一个资源是否可以被正确的回收



你可能感兴趣的:(Think,of,java)