橘子味的心
标题:Java final关键字

java中的final关键字用于限制用户修改变量或重写一个类或方法。 java final关键字可以在许多上下文中使用。 final可以是:

  1. 变量
  2. 方法

final关键字可以应用于变量,没有值的final变量称为空白变量或未初始化的最终变量。 它只能在构造函数中初始化。 空白最终变量也可以是静态的,它将仅在静态块中初始化。 在之后的文章中我们将详细学习这些。 下面先学习final关键字的基础知识。

1. Java final变量

如果将变量设置为final,则不能更改final变量的值(它将是常量)。final关键字应用有以下几点需要注意:

  1. 禁止变量的值被改变;
  2. 禁止方法重写;
  3. 禁止类继承;

final变量的示例

要改变final变量的值,这是不可能的,因为一个final变量一次分配一个值永远不能更改。如下试图修改 speedlimit 变量的值为 400,这是不允许的。

  1. class Bike9 {
  2. final int speedlimit = 90;// final variable
  3.  
  4. void run() {
  5. speedlimit = 400; // 不可以修改 final 变量的值
  6. }
  7.  
  8. public static void main(String args[]) {
  9. Bike9 obj = new Bike9();
  10. obj.run();
  11. }
  12. }// end of class
  13. Java

上面代码执行后生成以下结果 -

  1. [编译错误]Compile Time Error
  2. Java

2. Java final方法

如果任何方法声明为final,则不能覆盖它。

final方法的示例,下面方法是不能覆盖的 -

  1. class Bike {
  2. final void run() {
  3. System.out.println("running");
  4. }
  5. }
  6.  
  7. class Honda extends Bike {
  8. void run() { // final方法,不可以重写
  9. System.out.println("running safely with 100kmph");
  10. }
  11.  
  12. public static void main(String args[]) {
  13. Honda honda = new Honda();
  14. honda.run();
  15. }
  16. }
  17. Java

上面代码执行后生成以下结果 -

  1. [编译错误]Compile Time Error
  2. Java

3. Java final类

如果把任何一个类声明为final,则不能扩展它。final类的示例

  1. final class Bike {
  2. }
  3.  
  4. class Honda1 extends Bike { // 不可以扩展 final 类
  5. void run() {
  6. System.out.println("running safely with 100kmph");
  7. }
  8.  
  9. public static void main(String args[]) {
  10. Honda1 honda = new Honda();
  11. honda.run();
  12. }
  13. }
  14. Java

上面代码执行后生成以下结果 -

  1. [编译错误]Compile Time Error
  2. Java

问题:是否可继承final方法?

答: 是的,final方法是继承的,但是不能覆盖它。 例如:

  1. class Bike {
  2. final void run() {
  3. System.out.println("running...");
  4. }
  5. }
  6.  
  7. class Honda2 extends Bike {
  8. public static void main(String args[]) {
  9. new Honda2().run();
  10. }
  11. }
  12. Java

上面代码执行后生成以下结果 -

  1. Output:running...
  2. Java

问题:什么是空白或未初始化的final变量?

在声明时未初始化的final变量称为空白final变量。

如果要在创建一个对象时初始化变量,并且变量在初始化后就不会被改变, 这是非常有用的。 例如员工的PAN CARD号码。它只能在构造函数中初始化。

空白final变量的示例

  1. class Student{
  2. int id;
  3. String name;
  4. final String PAN_CARD_NUMBER;
  5. ...
  6. }
  7. Java

问题:可以初始化空白的final变量吗?

答: 是的,但只能在构造函数中。 例如:

  1. class Bike10 {
  2. final int speedlimit;// blank final variable
  3.  
  4. Bike10() { // 在构造函数中初始化
  5. speedlimit = 70;
  6. System.out.println(speedlimit);
  7. }
  8.  
  9. public static void main(String args[]) {
  10. new Bike10();
  11. }
  12. }
  13. Java

上面代码执行后生成以下结果 -

静态空白final变量

在声明时未初始化的静态final变量称为静态空白final变量。 它只能在静态块中初始化。

静态空白final变量的示例

  1. class A {
  2. static final int data;// static blank final variable
  3. static {
  4. data = 50;
  5. }
  6.  
  7. public static void main(String args[]) {
  8. System.out.println(A.data);
  9. }
  10. }
  11. Java

问题:什么是final参数?

如果将任何参数声明为final,则不能更改它的值。

  1. class Bike11 {
  2.  
  3. int cube(final int n) {
  4. n = n + 2;// can't be changed as n is final
  5. // n*n*n; // 不能修改 n 的值
  6. return n;
  7. }
  8.  
  9. public static void main(String args[]) {
  10. Bike11 b = new Bike11();
  11. b.cube(5);
  12. }
  13. }
  14. Java

上面代码执行后生成以下结果 -

  1. [编译错误]Compile Time Error
  2. Java