final、finalize和fianlly

本文深入解析Java中的final修饰符作用于类、方法和变量的不同效果,以及其在常量赋值中的应用。同时,探讨了finalize()方法在资源清理和垃圾回收中的角色,对比自动与手动回收机制,最后解释了finally关键字在异常处理中的用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可能猛的一看好像这些有着联系,但是其实他们一点关系都没有,只是长的很像的。

就像是生活中有些人虽然长的很像,但是一点血缘关系都没有,除非时电影、电视剧中,只要是长得像就会有点关系(哈哈)

虽然没关系但是他们的作用也要搞清楚

final(三大修饰符之一):

可以修饰类(此类不能被继承)

可以修饰方法(此方法不能被覆盖)

可以修饰变量:此变量值不可改变--常量(无初始值、只允许赋值一次)

各种常量的赋值:

1). 局部常量:显示初始化

2). 实例常量的赋值:显示初始化、动态代码块、构造方法。

3). 静态常量的赋值:显示初始化、静态代码块。

不同常量类型的特点:

1). 基本数据类型常量:值不可变。

2). 引用数据类型常量:地址不可变。

finalize()方法:

finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。

当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列

垃圾对象:没有有效引用指向此对象,为垃圾对象(两个对象相互引用也为无效引用)

垃圾回收:由GC销毁垃圾对象,释放数据存储空间

自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象

手动回收机制:使用System.gc();通知JVM执行垃圾回收(执行有间隔时间)如果在执行过程中,被别的有效引用指向此对象,那么垃圾回收将不再回收此对象,容易造成内存泄漏

垃圾复活:

protected void finalize(){  
        super.finalize();  
        System.out.println("execute method finalize()");  
        //将想要回收的垃圾做有效引用  
    } 

不建议使用子类覆盖Object中的finalize()方法去手动执行垃圾回收

finally:

finally一般用在如果出现异常的时候,可以去关闭资源,减少资源占用

public class TestFinally {

    public static void main(String[] args) {
        StringBuffer a = test2();
        String s = a.toString();
        int i = Integer.parseInt(s);
        System.out.println(i);
    }
    public static StringBuffer test2(){
        StringBuffer a = new StringBuffer();
        try{
             a.append("1");
            return a;
        }catch( Exception e ){
            e.printStackTrace();
             return a;
        }finally{
            a.append("2");
        }

    }
}

结果:12

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值