final、finally、finalize的区别

下面重点讲final

一:final

final的定义:final是一个关键字,final可以修饰类、属性、方法、局部变量。

当属性或局部变量被final修饰其值不能被再次修改,如果final变量是引用类型,这意味着该变量不能重新绑定到引用另一个对象,但是可以更改该引用变量指向的对象的内部状态,即可以从final数组或final集合中添加或删除元素。

使用final的情形

  • 不希望类被继承时,可以使用final修饰
  • 不希望父类的某个方法被子类覆盖/重写时,可以使用final修饰
  • 当不希望类中的某个属性的值被修改,可以使用final修饰
  • 当不希望某个局部变量被修改,可以使用final修饰 

 final使用的注意细节

  • final修饰的属性叫做常量,一般用XX_XX_XX来命名
  • final修饰的属性在定义时必须被赋初值,并且以后不能再被修改
  • final被赋值的位置可以是定义时、构造器中、代码块中
  • final修饰的属性如果是静态的,不能在构造器中赋值 
  • 包装类、String都是final类,不能被继承

 二:finally 

finally的定义:

finally是一个关键字,用在异常处理机制中。表示不管有没有发生异常都要执行finally代码里面的逻辑,所以finally里面主要写关闭资源的操作。 

使用finally的注意细节

  • finally里面尽量不要写return语句,因为写了以后会覆盖掉try-catch中的return 

演示细节:

public class Exception {

    public static int method(){
        try {
            String[] names = new String[3];
            if(names[1].equals("zhangsan")){
                System.out.println(names[1]);
            }else{
                names[3] = "hspedu";
            }
            return 1;
        } catch (ArrayIndexOutOfBoundsException e) {
            return 2;
        } catch(NullPointerException e){
            return 3;
        } finally{
            return 4;
        }
    }
    public static void main(String[] args) {
        System.out.println(method());
    }
}

上面代码输出的结果是4,因为finally是最后执行,然后它里面有return,这是相当于return 3就没用了,因为被覆盖掉了。

public class Exception {

    public static int method(){
        try {
            String[] names = new String[3];
            if(names[1].equals("zhangsan")){
                System.out.println(names[1]);
            }else{
                names[3] = "hspedu";
            }
            return 1;
        } catch (ArrayIndexOutOfBoundsException e) {
            return 2;
        } catch(NullPointerException e){
            return 3;
        } finally{
            System.out.println(4);
        }
    }
    public static void main(String[] args) {
        System.out.println(method());
    }
}

现在输出的结果就是4、3。虽然先执行的是return 3,但是他后面还有finally,有就必须执行。执行完以后才能返回。

三:finalize 

在从堆中永久删除对象之前,垃圾回收器调用该对象的finalize()方法,做一些释放资源的操作。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼吐泡泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值