Java面向对象设计 - Java final关键字
final关键字不允许修改或替换其原始值或定义。
final关键字可以在以下三个上下文中使用:
- 变量声明
- 类声明
- 方法声明
final 变量
如果一个变量被声明为final,它只能被赋值一次。最终变量的值在设置后不能修改。
变量声明包括局部变量的声明,方法/构造函数的形式参数,实例变量和类变量。
变量声明包括局部变量的声明,方法/构造函数的形式参数,实例变量和类变量。
final int YES = 1;
我们可以只设置一次final变量的值。
有两种方法来初始化final变量:
- 在声明时予以初始化。
- 将其初始化延迟到稍后的时间。
但是,我们必须在第一次读取最终变量之前初始化它。
- final局部变量
你可以声明一个局部变量final。如果将局部变量声明为空的最终变量,则必须在使用前初始化它。
- final参数
我们可以声明一个参数final。当调用方法或构造函数时,参数将使用实际参数的值自动初始化。
因此,您不能更改方法或构造函数体内的最终形式参数的值。
- final实例变量
我们可以声明一个实例变量final和blank final。
空白最终实例变量必须初始化一次,并且只有在调用类的任何构造函数时才初始化一次。
- final类变量
我们可以声明一个类变量final和blank final。我们必须在其中一个静态初始化器中初始化一个空的最终类变量。
- final引用变量
引用变量存储对象的引用。最终引用变量意味着,一旦引用一个对象(或null),它就不能被修改以引用另一个对象。
以下代码显示了test2()方法的最终形式参数x:
public void test2(final int x) {
如果我们有一个类的多个静态初始化器,我们必须在一个静态初始化器中初始化所有空的最终类变量一次。
public class Main { public static final int YES = 1; public static final int NO = 2; public static final String MSG; static { MSG = "final static variable"; } }
final 类
如果一个类被声明为final,它不能被扩展(或子类化)。
final 方法
如果一个方法声明为final,它不能在包含该方法的类的子类中重新定义(覆盖或隐藏)。