字面意思:最后的、最终的
一、可修饰:类、方法、属性、局部变量
二、场景:被final修饰的元素应该满足
(1)类:不能被继承
(2)方法:不能被子类重写/覆盖(override),但是可以重载
(3)属性:值不能被修改 public final double。。。
(4)局部变量:值不能被修改 final double。。。
三、注意细节:
(1)被final修饰的量为常量,名称通常用全大写,用下划线隔开
(2)被final修饰的属性必须要赋初值:可以直接在定义时赋;可以先声明,然后在构造方法中赋;可以向声明,然后在代码块中赋。
被static和final同时修饰的属性赋值:不能在构造函数中(因为构造函数在创建对象时调用,而static修饰的要在类加载时),只能在定义时,或者在静态代码块中赋初值。
(3)被final修饰的类虽然不能被继承,但是可以实例化
(4)如果类不是final的,但方法是final的时,该方法不可以被重写,但是可以被继承
(5)一般的,如果类是final的,则方法就没有必要加final了,因为final类无法被继承,所以也就没有子类对其方法进行重写了。
(6)final和static通常搭配使用,其顺序可以调换,底层编译器做了优化处理,使用该属性时不会导致整个类的加载
(7)包装器类(Double,Float,Integer,Boolean等)、String都是被final修饰的
(8)函数的形参可以被final修饰,但是不能被修改赋值