本文正在参与「金石方案」
前言
又迎来了一年一度的金三银四,尽管说今年的大环境不好,可是招聘仍是在火热进行中。
面试过 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