在Java中,final 关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。
用 final 修改类时,该类无法被继承。要注意 final 类中的所有成员方法都会被隐式地指定为 final 方法。
使用 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(); }
每次打印的两个 j 值都是一样的,而 i 的值却是不同的。
Q:final 作为函数参数类型
A:当函数参数为 final 类型时,你可以读取使用该参数,但是无法改变该参数的值。
原文:https://www.cnblogs.com/zccfrancis/p/14552898.html