本文正在参与「金石方案」
前言
又迎来了一年一度的金三银四,尽管说今年的大环境不好,可是招聘仍是在火热进行中。
面试过 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
我是,等待你的关注;
创作不易,请多多支持;
系列专栏:面试精讲 JAVA






