1. 含义
final 表面意思就是不可更改的,恒量的意思。final 修饰的变量与静态变量是有所不同的,静态变量指的是只有一份存储空间,值是可以改变的,而 final 修饰的变量是不可更改的。
2. 修饰类
当用 final 修饰一个类时,表明这个类不能被继承。其中,final 类中的所有成员方法都会被隐式地指定为 final 方法,而 final 类中的成员属性则不会有隐式的 final 修饰,这也恰恰说明 final 类的成员变量是可以更改的。
3. 修饰方法
final修饰的方法表示此方法已经是“最后的、最终的”含义,亦即此方法不能被重写。
注意:因为重写的前提是子类可以从父类中继承此方法,如果父类中 final 修饰的方法同时访问控制权限为private,将会导致子类中不能直接继承到此方法。因此,此时可以在子类中定义相同的方法名和参数,此时不再产生重写与final的矛盾,而是在子类中重新定义了新的方法。(类的 private 方法会隐式地被指定为 final 方法。)示例如下:
父类 Father 的具体代码如下:
1 | public class Father { |
子类 Son 的具体代码如下:
1 | public class Son extends Father { |
4. 修饰变量
final 修饰的变量必须要初始化,赋初值后不能再重新赋值。初始化可以以三种方式:
- 定义时初始化;
- 在构造方法中初始化;
- 在代码块中为 final 实例变量初始化。
示例如下:
1 | //1. 定义时初始化 |
当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用数据类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。
5. 修饰参数
与使用 final 修饰变量相似,在方法参数列表中被 final 修饰的基本数据类型参数在方法体内是不可以被更改的,如果是引用数据类型则不可以指向其他对象。
1 | public void change(final int i, final String str) { |