Java学习之finalize方法

目录

定义

举例说明

代码


定义

通俗解释:当垃圾回收器要回收一个对象(具体的对象)时,就会先调用finalize方法,此方法在实际工作中基本不会用到,但是面试的时候会问

举例说明

代码

package com.hspedu.object_;

public class Finalize_ {
    public static void main(String[] args) {
        Car bmw = new Car("BMW");
        //断掉对象引用和对象之间的连接
        //上述Car类对象(具体的对象)变成了一个垃圾
        //垃圾回收器就会回收(销毁)对象,在销毁对象前,会调用该对象的finalize方法
        //程序员就可以在 finalize中,写自己的业务逻辑代码(比如释放资源:数据库连接,或者打开文件..)
        //如果程序员不重写 finalize,那么就会调用Object类的finalize,即默认处理
        //如果程序员重写了 finalize, 就可以实现自己的逻辑
        bmw = null;
        
        System.out.println("退出程序...");

    }

}
class Car {
    private String name;

    public Car(String name) {
        this.name = name;
    }

    @Override
    protected void finalize() throws Throwable {
        System.out.println("我们销毁汽车" + name);
        System.out.println("释放了一些资源...");
    }
}

在子类中重写了finalize方法,但是运行后发现并没有输出

 原因:垃圾回收机制的调用,是由系统来决定(即有自己的GC算法)

解决方法:通过System.gc()主动触发垃圾回收机制(也不是100%能成功

package com.hspedu.object_;

public class Finalize_ {
    public static void main(String[] args) {
        Car bmw = new Car("BMW");
       
        bmw = null;
        System.gc();
        System.out.println("退出程序...");

    }

}
class Car {
    private String name;

    public Car(String name) {
        this.name = name;
    }

    @Override
    protected void finalize() throws Throwable {
        System.out.println("我们销毁汽车" + name);
        System.out.println("释放了一些资源...");
    }
}

会先输出"退出程序...",然后再输出finalize方法中的语句

本次运行没有触发垃圾回收机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值