final
关键字不允许修改或替换其原始值或定义。final
关键字可以在以下三个上下文中使用:
如果一个变量被声明为final
,它只能被赋值一次。final
变量的值在设置后不能修改。变量声明包括局部变量的声明,方法/构造函数的形式参数,实例变量和类变量。要将变量声明为final
,请在变量声明中使用final
关键字。
final int YES = 1;
final
变量的值只设置一次,它不能被重新赋值。有两种方法来初始化final
变量的值:
但是,必须要在第一次读取 final
变量之前初始化它。
final
局部变量 - 可以声明一个局部变量为final
。如果将局部变量声明为空的final
变量,则必须在使用前初始化它。final
参数 - 可以声明一个参数final
。 当调用方法或构造函数时,参数将使用实际参数的值自动初始化。因此,不能在方法或构造函数主体内更改final
参数的值。
final
实例变量 - 可以声明一个实例变量final
和空的final
。空的final
实例变量必须初始化一次,并且只有在调用类的任何构造函数时才初始化一次。
final
类变量 - 可以声明一个类变量final和空的final
。必须在其中一个静态初始化器中初始化一个空的最终类变量。
final
参考变量 - 引用变量存储对象的引用。final
引用变量意味着,一旦引用一个对象(或null
),它就不能被修改以引用另一个对象。
以下代码显示了test2()
方法的最终形式参数x:
public void test2(final int x) {
如果有一个类的多个静态初始化器,必须在一个静态初始化器中初始化所有空的final
类变量一次。
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
,它不能在包含该方法的类的子类中重新定义(覆盖或隐藏)。