Java 中的 final 关键字

一. 基本用法

  在Java中,final 关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。

   1.1 修饰类

  用 final 修改类时,该类无法被继承。要注意 final 类中的所有成员方法都会被隐式地指定为 final 方法。

   1.2 修饰方法

  使用 final 修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承

  使用 final 方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;

                第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。

  只有在想明确禁止该方法在子类中被覆盖的情况下,才将方法设置为 final 的。

  注意:类的 private 方法会隐式地被指定为 final 方法。

        final 不能用于修饰构造方法。

   1.3 修饰变量

  对于一个 final 变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改

  如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象

  如果是类的成员变量,则必须当场赋值,否则编译会报错

  注意:引用变量被 final 修饰之后,虽然不能再指向其他对象,但是它指向的对象的内容是可变的

二. 常见问题

  Q:final 与 static的区别

  A:static 作用于成员变量用来表示只保存一份副本,而 final 的作用是用来保证变量不可变。

  举例如下:

public class Test {
    public static void main(String[] args)  {
        MyClass myClass1 = new MyClass();
        MyClass myClass2 = new MyClass();
        System.out.println(myClass1.i);
        System.out.println(myClass1.j);
        System.out.println(myClass2.i);
        System.out.println(myClass2.j);
 
    }
}
 
class MyClass {
    public final double i = Math.random();
    public static double j = Math.random();
}
View Code

  每次打印的两个 j 值都是一样的,而 i 的值却是不同的。

 

  Q:final 作为函数参数类型

  A:当函数参数为 final 类型时,你可以读取使用该参数,但是无法改变该参数的值。

posted @ 2021-03-17 23:36  zjcfrancis  阅读(96)  评论(0编辑  收藏  举报