前言
final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值,只可以用于运算;final关键字修饰的方法不能被重写;final关键字修饰的类不能被继承。通过 final 关键字,让我们在编写代码时更加具有逻辑性,及时报错,反馈出与原本逻辑不合理的地方。
一、final关键字是什么?
final 是 Java 中的一个关键字,用于修饰类、方法和变量。
作用:
1.对于类:当一个类被声明为 final 类型的“类”时,表示该类是不能被其他类继承的。
2.对于常量:当一个变量被声明为 final 类型的“变量”时,表示该变量是一个常量,这个常量一旦被赋值后,就不能再改变。不能对其进行修改,但可以将其进行运算。
3.对于方法:当一个方法被声明为 final 类型的“方法”时,表示该方法是不能被子类重写或覆写的。
注:使用 final 关键字可以提供一定的安全性和约束,以确保类、方法或变量的不可改变性和稳定性。
二、如何使用?
1.final类
语法:final class 类名{}
public final class OuterClass { // some codes... }
特点:
1. 不能被继承。
2.提示不希望其他人对这个类进行任何改动。
3.该类中的所有方法都被隐式设置为 final 形式,不可被改变。但final类中的成员变量可以被定义为 fInal或 非final形式。
2.final常量
语法:final 数据类型 数据名
final int a = 2; // a = 2 不能改变,final常量可以用于计算,但 a 这个常量数值就是2
特点:
final常量可以用于计算,但不得对其重新赋值。
问题:一个变量,只用 final 关键字修饰,初次赋值时,若定义为一个范围的随机数,每次运行,都是不同的值。
import java.util.Random; public class Demo { public static void main(String[] args) { Random ran = new Random(); for(int i = 0;i<3;i++) { final int a = ran.nextInt(100); System.out.println(a); } } }
输出结果:
那怎么让这个final 关键字修饰的常量,每次输出都是一个固定值呢?
解决方法:在 Java 中定义全局常量,通常使用 public static final 修饰,常量只能在最开始的定义时被赋值,不会改变。(常量为随机数定义的第一个值,下一次运行不会改变)
import java.util.Random; public class Demo { static Random ran = new Random(); public static final int a = ran.nextInt(100); public static void main(String[] args) { for(int i = 0;i<3;i++) { System.out.println(a); } } }
输出结果:
原因: 修改前的代码,for循环内创建 final类型的常量,每次循环,都会生成一个新的同名的final常量,对应赋值的随机数不同;修改后的代码,在静态区进行赋值,不会重复生成新的final常量,每次输出都是固定的值。
3.final方法
语法:final void 方法名(){}
public final void action(){ //final声明的方法不能被重写 System.out.println("亲爱的观众朋友们,我想死你们了!"); }
特点:
final 方法不能子类覆写或重写。
下面是一个错误示范!!!(子类覆写了父类的final方法)
public class Parent{ final public void action(){ System.out.println(“亲爱的观众朋友们,我想死你们了!”); } } class Child extends Parent{ public void action(){ System.out.println(“大家好”); } } //报错!!!子类不能覆写父类的 final 方法
注:
在继承中,父类有 private 权限修饰的方法,这些方法都属于父类独有,子类没有覆写或调用这些方法的权限,子类即使有和其名字相同的方法,也是一个新的,属于子类的方法,只是同名而已。
因此,父类中有 private final 修饰过的方法,子类中也有对应同名的方法,看似覆写了final方法,实际上不是被覆写了,只不过是同名的不同方法。
总结
本文对JAVA中的final关键字进行了解读。如果读者有补充的,或纠错该文的内容,随时欢迎在评论区中评论,欢迎补充,并会对错误做出及时的回应。