【JAVA】让 ChatGPT 来讲讲 final

final在Java中用于声明不可变的类、方法和变量,确保代码的稳定性和安全性。final类不能被继承,final方法不能被重写,final变量一旦赋值后不可更改,而final引用类型变量则不能指向其他对象。final的关键作用在于防止意外修改,提高代码的封装性和不可变性。

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

前言

又迎来了一年一度的金三银四,虽然说今年的大环境不好,但是招聘还是在火热进行中。

面试过 Java 工程师的小伙伴都知道,关键字 final 是面试高频题,面试官上来就问,说说 final 的作用。

那么接下来,让我们使用 ChatGPT 并结合自己的理解来讲讲关键字 final

正文

final 关键字有什么作用呢?让我们问问 ChatGPT:

1、final 类:如果一个类被声明为 final,则该类不能被继承,即不能有子类。这通常用于保护父类的实现不被修改或扩展。

final class MyClass {
    // 类的实现
}
复制代码

在上述代码中,MyClass 被声明为 final,因此不能被其他类继承。如果其他类试图继承 MyClass,编译器会报错。

2、final 方法:如果一个方法被声明为 final,则该方法不能被子类重写(覆盖),即不能有子类对该方法进行重新实现。这通常用于保护父类的某些行为不被修改。

class MyBaseClass {
    public final void myMethod() {
        // 方法的实现
    }
}

class MySubClass extends MyBaseClass {
    // 尝试重写父类的 myMethod() 方法,编译器会报错
    public void myMethod() {
        // 重写的方法实现
    }
}
复制代码

在上述代码中,MyBaseClassmyMethod() 方法被声明为 final,因此不能被子类 MySubClass 重写。如果 MySubClass 尝试重写该方法,编译器会报错。

3、final 变量:如果一个变量被声明为 final,则该变量的值不能被改变,即它是一个常量。在使用 final 变量时,一般建议将其命名为全大写,以便与其他变量区分开来。

class MyClass {
    private static final int MY_CONSTANT = 42;

    public void myMethod() {
        // 使用 MY_CONSTANT 常量
        int result = 10 + MY_CONSTANT;
        System.out.println(result); // 输出 52
        MY_CONSTANT = 32;
    }
}
复制代码

在上述代码中,MY_CONSTANT 被声明为 privatestatic,并被赋予一个值42。由于它被声明为final,因此不能再被修改。在 myMethod() 方法中,我们可以安全地使用这个常量,因为我们知道它的值不会改变。

4、final 参数:如果一个参数被声明为 final,则该参数在方法中不能被重新赋值。这样做可以确保方法中不会意外修改传递进来的参数值。

public void foo(final int x) {
    x = 10; // 编译错误:无法为 final 变量 x 赋值
}
复制代码

在上述代码中,foo() 方法的参数 x 被声明为 final,因此在方法内部,其不能再被重新赋值了。

5、final 引用类型变量:如果一个引用类型变量被声明为 final,则该引用变量在初始化之后不能再指向其他对象。这种使用方式通常用于创建常量引用。

public class Car {
    public String name;

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

    public static void main(String[] args) {
        final Car car1 = new Car("红旗");
        Car car2 = new Car("宾利");
        Car car3 = new Car("宝马");

        car3 = car2;
        car3 = car1;
        car1.name = "吉利";
        System.out.println(car1.name); // 输出 “吉利”
        car1 = car2;
    }
}
复制代码

在上述代码中,引用类型 Car 的变量 car1 被声明为 final,不难发现,将 car2 赋值给 car3 是没有问题的,但是当把 car2 赋值给 car1 时,编译器会报错。但如果修改 car1 的属性 name 却又是行得通的。

总的来说,对于基本类型的变量,一旦声明为 final,其值就不能再改变了。而对于引用类型的变量,final 只能防止该变量再次指向其他对象,但并不能阻止该对象本身的状态发生改变。

后记

综上所述,final 关键字的作用就是为了保证程序的安全性和可靠性,防止变量、方法或类被误修改,确保程序的正确性和稳定性。

以上就是 让 ChatGPT 来讲讲 final 的所有内容了,希望本篇博文对大家有所帮助!

作者:𝓼𝓲𝓭𝓲𝓸𝓽
链接:https://juejin.cn/post/7218438764099076133
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值