首页 > 编程笔记 > Java笔记 阅读:9

Java中的final关键字(3种用法,附带实例)

final 的意思就是“最终的”“不可变更的”,Java 程序中用它来声明某个元素时表示的就是这个意思。

final 可以对变量、方法和类进行声明:

Java final声明变量

final 可以用来声明非静态变量和静态变量,以此表示对应的变量不可被修改。

一般在声明时我们都会对变量直接进行赋值来进行初始化,否则就需要在指定的区域内进行初始化,比如非静态变量需要在构造方法中初始化,而静态变量则需要在 static 代码块中初始化。

通过一个实例来看 final 声明变量的情况:
public class FinalTest1 {
    final int a;
    final int b = 20;
    static final int c;
    static final int d = 40;

    static {
        c = 30;
    }

    FinalTest1() {
        this.a = 10;
    }

    public static void main(String[] args) {
        FinalTest1 ft = new FinalTest1();
        ft.a = 20;
    }
}
首先看变量 a,由于没有在声明时对其进行初始化,因此需要在构造方法中对其进行赋值初始化。

其次看变量 c,它是静态变量且没有在声明时对其初始化,所以要在 static 代码块中对其进行赋值。

最后是变量 b 和变量 d,它们都在声明时直接被赋值进行了初始化。此外要注意,被 final 声明的变量在赋值初始化后就不能被再次修改了,所以在 main() 方法中对变量 a 再次赋值是不允许的,程序将报“The final field FinalTest1.a cannot be assigned”的错误。

Java final声明方法

final 用来声明方法时表示该方法不能被重写。例如:
public class FinalTest2 extends FinalMethod {
    void print() {
        System.out.println("重写print方法");
    }
}

class FinalMethod {
    final void print() {
        System.out.println("该方法不能被重写");
    }
}
程序中 FinalMethod 类作为父类,它声明了一个 final 的 print() 方法,表示该方法不能在子类中被重写,所以在 FinalTest2 类中重写 print() 方法将导致“Cannot override the final method from FinalMethod”的编译错误。

Java final声明类

final 用来声明类时表示该类不能被继承。例如:
public class FinalTest3 extends FinalClass {

}

final class FinalClass {
    void print() {
        System.out.println("FinalClass 类不能被继承");
    }
}
程序中声明了一个 final 的 FinalClass 类,表示该类不能被继承,而由于 FinalTest3 类尝试继承 FinalClass 类,于是导致“The type FinalTest3 cannot subclass the final class FinalClass”的编译错误。

相关文章