final、finally和finalize的区别

本文详细介绍了Java中的final关键字,包括其在类、变量和方法中的使用方式,以及初始化final变量的四种常见情况。同时,文章还解释了finally和finalize的概念及其应用场景。

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

1.fianl主要用于修饰类、变量和方法,其中修饰的类为不可变类,该类不可以被继承

public final class finalClass{
    ...
}

修饰的方法不可以被重写

public final void finalMethod(){
    ...
}

修饰的变量为变常量,这种变量经过一次初始化之后就不能在被修改值了。初始化final变量有四种情况:

1.所有的final变量都可以在定义的时候就初始化
public final int a = 1;
public static final int sa = 1;
2.非静态final变量可以在非静态初始化块中初始化,不可以在静态初始化块中被初始化
public final int b;
{
    a = 1;
}
3.静态final变量与上面的情况相反
public static final int sb;
static{
    sb = 1;
}
4.非静态final变量可以在构造方法中被初始化,但是静态final变量不可以
public final int c;
public A(){
    c = 1;
}

2.fianlly用于处理异常捕获的try/catch语句中,不管try/catch语句最终会怎样,finally语句的内容都会被执行,就算是return也会在return之前执行finally语句块里面的内容

try{
    throw new Exception("自定义异常");
}
catch(Exception e){
    System.out.println(e.getMessage());
}
finally{
    System.out.println("就算你抛出了异常,也不能打断我的执行");
}

3.fianlize是一个方法,它的原生类是java.lang.Object类,该方法是GC运行机制的一部分,在GC清理它所从属的对象时自动调用,如果执行它的过程中抛出了无法捕获的异常,GC将会终止对这个对象的清理,直到下一次GC才会继续调用finalize方法对这个对象进行清理

public class defineClass{
    @Override
    public void finalize(){
        System.out.println("执行了finalize方法");
    }
    public static void main(String[] args){
        defineClass dc = new defineClass();
        dc = null;
        //调用GC
        System.gc();
        //也可以Runtime.getRuntime().gc();
    }
}

这是java的面试题,参照出处:http://lib.youkuaiyun.com/article/javase/43743

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值