Final 关键字
final variable 意味 【最后的变量,不可改变的变量即常量】 Java中该关键字即代表常量
应用场景:用final修饰将变量设置为常量,以后也不打算做修改,一般同static共用。
// 固定的业务场景代码
public static final String SERVICE_SCENE_CODE = "-1";
// 定义存储于Redis中的Key
public static final String TEST_REDIS_KEY = "TEST_REDIS_KEY_FINAL";
final method 意味 【最终的方法,不可被改变的方法】Java中该关键字即代表不可被改变的方法,即不能被子类重写,子类不能改变其原有意味。
final class 意味 【最终的类,不可改变的类】Java中该关键字代表最终类,不能再‘繁衍后代了’即不能被继承。
1 // 被final修饰的class是最终类,不能被继承
2 public final class FinalClass {
3 // 被final修饰的常量可以在声明时赋值
4 private final String str;
5
6 public FinalClass() {
7 str = "1.被final修饰的变量必须初始化,1.声明时赋值2.构造方法中赋值";
8 }
9
10 public void testOut() {
11 System.out.println("3.被final修饰的方法不能被子类重写");
12 }
13
14 public static void main(String[] args) {
15 // 1.final变量即最终变量不能被修改
16 FinalClass finalClass = new FinalClass();
17 System.out.println(finalClass.str);
18 // 被final修饰的引用类型变量,初始化后不能指向另一个对象,否则编译不通过
19 final Object finalObject = new Object();
20 // 试图修改后编译不通过
21 finalObject = new Object();
22 // 2.在变量创建的时候赋值
23 final String finalStr = "2.被final修饰的变量,再赋值后就是最终变量即常量,不能被修改";
24 System.out.println(finalStr);
25 // 3.final修饰的方法是最终方法不能被子类重写修改其意味
26 finalClass.testOut();
27 }
28 }
29 // 5.不能继承被final修饰的最终类,否则会编译不通过
30 class CantExtend extends FinalClass {
31 public String name;
32 // 4.试图重写父类中被final修饰的方法时会导致编译不通过
33 public void testOut() {
34 System.out.println("不能重写父类中final方法");
35 }
36 }