【java】final、finally和finalize的区别

例题:
package com.overload;

public class ExceptionTest {
        public static void main(String[] args) {
            int result = test();
            System.out.println(result); //100
        }
        public static int test(){
            int i = 100;
            try {
                return i;
            } finally {
                i++;
            }
        }
}

结果为:100

造成结果是如此的原因是因为:

finally块中的代码会在try块中的return i;语句执行之后,返回之前执行。

在finally块中,i的值会被增加1。然而,finally块中对变量i的修改不会影响return语句的返回值。

当finally块执行完毕后,test()方法的返回值已经确定为100,所以最终的输出结果是100。

具体地说,当执行到return i;语句时,i的值为100。然后,finally块中的代码会将i的值增加1,但是这个修改不会影响return语句的结果。因此,test()方法的返回值仍然是100。

总结起来,finally块中的代码会在try块中的return语句执行之后、方法返回之前执行,但它不会改变return语句的结果。所以,无论finally块中的代码如何修改变量的值,方法的返回值都不会改变。

 讲解:

final、finally和finalize它们是Java中的三个不同的概念,用于不同的目的:


final是一个关键字,可以应用于类、方法和变量。它的作用如下:
当应用于类时,表示该类不能被继承,即它是最终的。
当应用于方法时,表示该方法不能被子类重写,即它是最终的。
当应用于变量时,表示该变量的值不能被修改,即它是一个常量。

// final类示例
final class FinalClass {
    // final方法示例
    public final void finalMethod() {
        // 方法体
    }

    // final变量示例
    public final int finalVariable = 10;
}


finally是一个关键字,用于定义一个代码块通常与try-catch语句结合使用。它的作用如下:
finally块中的代码始终会被执行,无论是否发生异常。
finally块中的代码通常用于执行清理操作、释放资源或确保一些必要的操作得以完成。

try {
    // 可能会抛出异常的代码
} catch (Exception e) {
    // 异常处理代码
} finally {
    // 执行清理操作或必要的操作
}


finalize是一个方法,定义在Object类中,可以被子类重写。它的作用如下:
finalize方法在垃圾回收器回收对象之前被调用。
子类可以重写finalize方法来定义对象在被销毁之前的清理操作。
在现代Java编程中,推荐使用try-finally或try-with-resources来替代finalize方法进行资源的清理和释放。
 

class MyClass {
    @Override
    protected void finalize() throws Throwable {
        // 对象销毁前的清理操作
        super.finalize();
    }
}


尽管finalize方法可以被重写,但它的使用已经不再推荐,因为它的执行时机不确定且难以控制。现代的Java编程中更倾向于使用显式的资源管理和try-finally或try-with-resources来确保资源的正确释放。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值