Java中的final关键字(3种用法,附带实例)
final 的意思就是“最终的”“不可变更的”,Java 程序中用它来声明某个元素时表示的就是这个意思。
final 可以对变量、方法和类进行声明:
一般在声明时我们都会对变量直接进行赋值来进行初始化,否则就需要在指定的区域内进行初始化,比如非静态变量需要在构造方法中初始化,而静态变量则需要在 static 代码块中初始化。
通过一个实例来看 final 声明变量的情况:
其次看变量 c,它是静态变量且没有在声明时对其初始化,所以要在 static 代码块中对其进行赋值。
最后是变量 b 和变量 d,它们都在声明时直接被赋值进行了初始化。此外要注意,被 final 声明的变量在赋值初始化后就不能被再次修改了,所以在 main() 方法中对变量 a 再次赋值是不允许的,程序将报“The final field FinalTest1.a cannot be assigned”的错误。
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”的编译错误。