Java final关键字

Java final关键字

final关键字不允许修改或替换其原始值或定义。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,它不能被扩展(或子类化)。

final方法

如果一个方法声明为final,它不能在包含该方法的类的子类中重新定义(覆盖或隐藏)。