Java核心思想学习——
final关键字的用法:
表示无法改变。使用final的三种情况:数据、方法和类。
final数据:
定义常量:基本数据类型——定义时必须赋值;
定义对象:final将使得引用恒定不变——引用被初始化指向唯一对象,无法改变其指向;对象自身可以变化,如数组也是一种引用。
final数据的赋值必须在域定义or构造器中使用表达式赋值,保证使用前总被初始化。
关于static final域:【只占据一段】【不能改变的】存储空间!属于编译期常量,使用大写表示,下划线分隔单词。
static final int VALUE_ONE = 20;
空白final:被声明为final但未给定初值的域;
一个类中的final域可以根据对象的不同而不同,在对象生命期中保持恒定不变。
final参数:
java允许在参数列表中以声明的方式将参数指定为final。指定为final的参数将无法在方法中更改参数引用所指对象——通常用于向匿名内部类传递数据。
final方法:
用于锁定方法,防止被继承类修改:保持不变,不被覆盖!
关于效率问题:编译器将针对方法的所有调用转为内嵌调用,以方法中实际代码的副本替代方法的调用;消除调用的开销,但会膨胀代码。
不要使用final方法进行代码优化。
仅仅在需要明确静止覆盖时,才设置finla方法。
注意所谓【覆盖】——
只有当某方法是基类接口的一部分,且必须是“能将一个对象向上转型”为其基类并调用相同方法时——才存在覆盖!
对于private方法:并不是基类接口,在导出类中生成同名方法——并不属于方法,只是一个同名的导出类方法而已!
所以:覆盖是针对基类接口方法而言的!
final类:
final class className
final类不允许继承!类中所有方法隐式定义为final——无法覆盖!