登陆 / 注册
JAVA 学习手册 展开/折叠

final关键字

阅读数:7

Java中的final关键字用于限制用户。Java final关键字可以在许多上下文中使用。例如可以是:

变量被final修饰时,值不可改变

方法被final修饰时,不可被重写

类被final修饰时,不可被继承

final.jpg

final关键字可以应用于变量,没有值的final变量称为空常量或未初始化的常量。它只能在构造函数中初始化。空常量也可以是静态的,只在静态块中初始化。我们将详细了解这些。让我们先学习final一个关键字的基本知识。


Java final修饰变量

如果将任何变量设为常量,则不能更改final修饰变量的值(它将是常量)。

如果修饰的是成员变量,则可以在构造方法中进行初始化

但是真正的常量是用stctic final修饰的,常量名需要大写,且值不可改变并要在声明时就为其初始化。

class Bike{  
     final int speedlimit=90;//final修饰的变量
     void run(){  
          speedlimit=400; //编译时错误,被final修饰的变量不能被改变
     }  
 public static void main(String args[]){  
     Bike obj=new  Bike();  
         obj.run();  
     }  
}


Java final修饰方法

如果将任何方法设为final方法,则不能重写它。

class Bike{  
  final void run(){//final修饰的方法
      System.out.println("跑步");
   }  
}  
     
class Honda extends Bike{  
   void run(){
       System.out.println("已经跑了10km");//这里对fina修饰的方法进行了重写,会报编译错误
   }  
     
   public static void main(String args[]){  
       Honda honda= new Honda();  
       honda.run();  
   }  
}


Java final修饰类

如果将任何类设为final类,则不能继承它。

final class Bike{  //final修饰的类
  final void run(){
      System.out.println("跑步");
   }  
}  
     
class Honda extends Bike{  //这里对fina修饰的类进行了继承,会报编译错误
   void run(){
       System.out.println("已经跑了10km");
   }  
     
   public static void main(String args[]){  
       Honda honda= new Honda();  
       honda.run();  
   }  
}


final的使用注意点

是否可以继承了final修饰的方法?

是的,final修饰方法可以被继承,但不能重写它。例如:

class Bike{  
  final void run(){
      System.out.println("运行中...");
  }  
}  
class Honda2 extends Bike{  
   public static void main(String args[]){  
        new Honda2().run(); //使用了匿名对象
   }  
}

运行以上示例,输出如下结果:

运行中...

是否可以final修饰未初始化的变量?

声明时未初始化的final变量称为final修饰的空变量。

如果您想要创建一个在创建对象时初始化的变量,并且一旦初始化就不能更改,那么它是有用的。例如,员工的卡号。

它只能在构造函数中初始化。

class Bike{  
  final int speedlimit;//final修饰的变量
    
  Bike(){  
      speedlimit=70;  
      System.out.println(speedlimit);  
  }  
  
  public static void main(String args[]){  
        new Bike();  
  }  
}

运行以上示例,输出如下结果:

70

static final修饰的变量

它在静态代码中进行初始化、

class A{  
  static final int data;//static final 修饰的未赋值int型变量 
  static{ data=50;}  
  public static void main(String args[]){  
    System.out.println(A.data);  
 }  
}

运行以上示例,输出如下结果:

50

微信扫码登陆