1. 含义
final关键字,实际的含义就一句话,不可改变。什么是不可改变?就是初始化完成之后就不能再做任何的修改,修饰成员变量的时候,成员变量变成一个常数;修饰方法的时候,方法不允许被重写;修饰类的时候,类不允许被继承;修饰参数列表的时候,入参的对象也是不可以改变。这个就是不可变,无论是引用新的对象,重写还是继承,都是改变的方法,而final就是把这个变更的路给堵死。
2. 用法与底层原理
2.1.final修饰成员变量
public final String finalVal = "finalVal";
finalVal = "changeValue";// 不允许,不能被修改
2.2.final修饰方法
public final void finalMethod() {
System.out.println("finalMathod");
}
// 不允许,不能被重写
@Override
public void finalMehod() {}
2.3.final修饰参数列表
public void finalMethod2(final String name) {
//name = "wusicheng";//error 不能修改
System.out.println("hello " + name);
}
2.4.final修饰类
final class FinalClass {
}
// 不允许,不能被继承
class ChildClass extends FinalClass{}
3. 实际应用
一般使用都是用在定义常量,与static搭配进行使用。
4. 总结
- final关键字的精髓是不可变,不可变的常量、不能重写的方法、不能被继承的类、不能被修改的入参;
- final关键字修饰变量的时候,变量的地址不可变,但是变量地址的内容是可变的;
- Thinking in Java里面,描述使用final的两种情况是为了设计与效率,换言之就是为了保证这些东西不可变,同时将相关的变量放到常量池当中,相关的方法做内联的优化等等,由于这个实在是太底层了,在这里省略。
5.吐槽
我要填的坑那么的多。