Java final关键字

1 什么是Java的final关键字

Java中的final关键字用于限制用户。Java final关键字可以在许多地方使用:

  1. 变量
  2. 方法

final关键字可以与变量一起应用,该变量没有值,称为空白final或未初始化的final。它只能在构造函数中初始化。空白final也可以是静态的,也只能在静态块中进行初始化。要了解这些内容。首先让我们学习final关键字的基础知识。

2 Java的final变量

如果将任何变量设置为final,则不能更改final变量的值(我们可以把它叫常量)。

2.1 final变量的示例

有一个final的speedlimit变量,我们尝试更改此变量的值,但发现不能更改,因为一旦分配了值的final变量就永远无法更改。

/**
 * 一点教程网 - http://www.yiidian.com
 */
class Bike9{
    final int speedlimit=90;//final变量
    void run(){
        speedlimit=400; //这里会编译报错,因为final变量不能修改
    }
    public static void main(String args[]){
        Bike9 obj=new  Bike9();
        obj.run();
    }
}

以上代码编译报错!

3 Java的final方法

如果将任何方法定义成final方法,该方法则不能被覆盖。

3.1 Java的final方法示例

/**
 * 一点教程网 - http://www.yiidian.com
 */
class Bike{
    final void run(){
        System.out.println("跑...");
    }
}

class Honda extends Bike{
    void run(){ //这个会编译报错,因为final方法不能被覆盖
        System.out.println("自行车安全地跑...");
    }

    public static void main(String args[]){
        Honda honda= new Honda();
        honda.run();
    }
}

以上代码编译报错!

4 Java的final类

如果你将任何一个类定为final,该类将无法被继承。

4.1 Java的final类示例

/**
 * 一点教程网 - http://www.yiidian.com
 */
final class Bike{}

class Honda1 extends Bike{ //这里编译报错,因为final类不能被继承
    void run(){
        System.out.println("自行车安全地跑...");
    }

    public static void main(String args[]){
        Honda1 honda= new Honda1();
        honda.run();
    }
}  

以上代码编译报错!

5 Java的final常见问题

5.1 final方法可以继承吗

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

/**
 * 一点教程网 - http://www.yiidian.com
 */
class Bike{
    final void run(){
        System.out.println("跑...");
    }
}
class Honda2 extends Bike{
    public static void main(String args[]){
        new Honda2().run();
    }
}

输出结果为:

跑...

5.2 什么是空白final变量

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

如果要创建一个在创建对象时已初始化的变量,并且一旦初始化就不能更改,空白final变量就很实用!例如,员工工卡ID号,只能在构造函数中初始化。

/**
 * 一点教程网 - http://www.yiidian.com
 */
class Emp{
    int id;
    String name;
    final String CARD_ID;  
   ...
}  

5.3 静态空白final变量

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

/**
 * 一点教程网 - http://www.yiidian.com
 */
class A{
    static final int data;//静态空白final变量
    static{ data=50;}
    public static void main(String args[]){
        System.out.println(A.data);
    }
}  

5.4 什么是final参数

如果将任何参数声明为final,则无法更改其值。

/**
 * 一点教程网 - http://www.yiidian.com
 */
class Bike11{
    int cube(final int n){
        n=n+2;//这里编译报错,因为final参数值不能被修改
        n*n*n;
    }
    public static void main(String args[]){
        Bike11 b=new Bike11();
        b.cube(5);
    }
}  

以上代码编译报错!

5.5 构造方法可以是final吗

不可以,因为构造方法是不可能被继承的。

一点教程,一个分享编程知识的公众号。跟着站长一起学习和进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

文章不涉及代码,不烧脑细胞,人人都可以学习。

当你决定关注「一点教程」,你已然超越了90%的程序员!

一点教程二维码