【JAVA】让 ChatGPT 来讲讲 final
前言
又迎来了一年一度的金三银四,虽然说今年的大环境不好,但是招聘还是在火热进行中。
面试过 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() {
// 重写的方法实现
}
}
在上述代码中,MyBaseClass
的 myMethod()
方法被声明为 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
被声明为 private
和 static
,并被赋予一个值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 的所有内容了,希望本篇博文对大家有所帮助!
📝 上篇精讲:【JAVA】让 ChatGPT 来描述 IOC
💖 我是 𝓼𝓲𝓭𝓲𝓸𝓽,期待你的关注;
👍 创作不易,请多多支持;
转载自:https://juejin.cn/post/7218438764099076133