MENU

Java-37 final关键字

October 10, 2023 • Read: 71 • Java阅读设置

面向对象编程

final关键字

1 final关键字是什么

1) final关键字属于Java中的关键字,其能修饰的结构有:类、方法和变量。
2) final关键字的作用为限定其修饰的结构为“最终版本”,简单地说,不会改变。

2 final类

  • 类的改变体现在其子类上,因为子类相当于在父类的基础上扩展功能。
  • final类意味着该类限定为没有子类的类。
    因此,对于不需要再扩展功能的类,可以用final来修饰。
  • 比如:String类、System类、StringBuffer类

3 final方法

  • 方法的改变体现在对其重写上,方法的重写相当于给该方法扩展了一个版本。
  • final方法意味着该方法限定为不能被重写的方法。
  • 比如,Object类中的getClass()方法。
    另外,查看该方法的源码会发现除了被final修饰,该方法还被native关键字修饰,而被native关键字修饰的方法没有方法体,这意味着该方法具体实现为调用底层c或c++代码,不是用Java实现,隐藏这些代码,不对外开放。
    2023-10-10T12:27:12.png

4 final变量

在类中,变量包括局部变量(方法中的变量和形参)和属性2种。
1) final局部变量
final局部变量 表示该变量的值不能被改变。

  • 对于方法中的变量,体现在,方法中一旦定义了final变量,即不能进行对该变量的值改变的操作。
  • 对于方法中的形参,体现在,在方法中不能进行对该形参的值改变的操作。调用时的传入实参,就是为形参赋值。

简单地说,final局部变量就是方法中限定为不能进行值操作的变量。注意,并没有要求一定要赋值,只是限定不能对其进行值操作。

2) final属性
final属性不同于final局部变量final属性代表着类或对象具有的具有确定值,且不会改变(即无法进行值操作)的属性。
也就是说,final属性必须满足2两点:

  • final属性必须一开始就有确定的值。换句话说,不能使用默认初始化。

    • 若为类final属性(即static也修饰的),要在类加载完成时,该属性有确定的值。
    • 理解:类的属性即static属性,一旦类加载完成后,这类属性只能通过类或对象来访问值或者修改值,但final限定不能修改值,因此static final属性只能被类或对象访问值,因此必须在类加载完成之前,就完成static final属性的值的确定。
    • 因此,类final属性初始化的情况只有2种:1)显式初始化 2)static代码块初始化。
    • 若为对象final属性,在对象实例化完成后该属性有确定的值。
    • 理解:对象的属性,一旦对象完成实例化,其属性只能被对象访问或修改值,但final限定不能修改值,因此只能被对象访问值,因此必须在对象完成实例化之前就确定其final属性的值。
    • 因此,对象final属性初始化的情况有3种:1)显式初始化 2)代码块初始化 3)构造器初始化
  • final属性不能进行值操作。

最后有一个小点,static final属性也称为全局常量,意味着该属性有确定的值且不会改变,并且随类加载而加载,只存在一份,所有对象共享。

3) 由于final变量就是值不会改变的变量,因此final变量实际上就是常量。也就是说,不论是final局部变量还是final属性,定义时应符合常量的标识符命名规则、规范,也就是全部大写。

Last Modified: October 16, 2023