java中的final
关键字用于限制用户修改变量或重写一个类或方法。 java final
关键字可以在许多上下文中使用。 final
可以是:
- 变量
- 方法
- 类
final
关键字可以应用于变量,没有值的final
变量称为空白变量或未初始化的最终变量。 它只能在构造函数中初始化。 空白最终变量也可以是静态的,它将仅在静态块中初始化。 在之后的文章中我们将详细学习这些。 下面先学习final
关键字的基础知识。
1. Java final变量
如果将变量设置为final
,则不能更改final
变量的值(它将是常量)。final关键字应用有以下几点需要注意:
- 禁止变量的值被改变;
- 禁止方法重写;
- 禁止类继承;
final变量的示例
要改变final
变量的值,这是不可能的,因为一个final
变量一次分配一个值永远不能更改。如下试图修改 speedlimit 变量的值为 400,这是不允许的。
class Bike9 { final int speedlimit = 90;// final variable void run() { speedlimit = 400; // 不可以修改 final 变量的值 } public static void main(String args[]) { Bike9 obj = new Bike9(); obj.run(); } }// end of class
上面代码执行后生成以下结果 -
[编译错误]Compile Time Error
2. Java final方法
如果任何方法声明为final
,则不能覆盖它。
final
方法的示例,下面方法是不能覆盖的 -
class Bike { final void run() { System.out.println("running"); } } class Honda extends Bike { void run() { // final方法,不可以重写 System.out.println("running safely with 100kmph"); } public static void main(String args[]) { Honda honda = new Honda(); honda.run(); } }
上面代码执行后生成以下结果 -
[编译错误]Compile Time Error
3. Java final类
如果把任何一个类声明为final
,则不能扩展它。final
类的示例
final class Bike { } class Honda1 extends Bike { // 不可以扩展 final 类 void run() { System.out.println("running safely with 100kmph"); } public static void main(String args[]) { Honda1 honda = new Honda(); honda.run(); } }
上面代码执行后生成以下结果 -
[编译错误]Compile Time Error
问题:是否可继承final方法?
答: 是的,final
方法是继承的,但是不能覆盖它。 例如:
class Bike { final void run() { System.out.println("running..."); } } class Honda2 extends Bike { public static void main(String args[]) { new Honda2().run(); } }
上面代码执行后生成以下结果 -
Output:running...
问题:什么是空白或未初始化的final变量?
在声明时未初始化的final
变量称为空白final
变量。
如果要在创建一个对象时初始化变量,并且变量在初始化后就不会被改变, 这是非常有用的。 例如员工的PAN CARD
号码。它只能在构造函数中初始化。
空白final
变量的示例
class Student{ int id; String name; final String PAN_CARD_NUMBER; ... }
问题:可以初始化空白的final变量吗?
答: 是的,但只能在构造函数中。 例如:
class Bike10 { final int speedlimit;// blank final variable Bike10() { // 在构造函数中初始化 speedlimit = 70; System.out.println(speedlimit); } public static void main(String args[]) { new Bike10(); } }
上面代码执行后生成以下结果 -
70
静态空白final变量
在声明时未初始化的静态final
变量称为静态空白final
变量。 它只能在静态块中初始化。
静态空白final变量的示例
class A { static final int data;// static blank final variable static { data = 50; } public static void main(String args[]) { System.out.println(A.data); } }
问题:什么是final参数?
如果将任何参数声明为final
,则不能更改它的值。
class Bike11 { int cube(final int n) { n = n + 2;// can't be changed as n is final // n*n*n; // 不能修改 n 的值 return n; } public static void main(String args[]) { Bike11 b = new Bike11(); b.cube(5); } }
上面代码执行后生成以下结果 -
[编译错误]Compile Time Error