Java中final的使用小结
final通常指的是“这是无法改变的。”不想做改变可能出于两种理由:设计或效率。
final不能修饰构造函数
以下谈论可能使用到final的三种情况:数据,方法和类。
1. final数据
final常量:用final定义的基本数据常量,定义的时候就必须对其进行赋值,值一旦给定就无法改变。
final对象:用final定义的对象引用,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另
一个对象。然而,对象其自身确是可以被修改的。(同样适用于数组)
空白final
所谓空白final是指被声明为final但又未给定初值的域,但是编译器要确保空白final在使用前被初始化。这在final的使用上
提供了更大的灵活性,为此,一个类中的final域就可以做到根据对象而有所不同,却又保持不变的特性。(必须在域的定义
处,或者每个构造器中用表达式对final进行赋值)
final参数
当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值
2. final方法
final方法不能被子类覆盖,但可以继承
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
final和private关键字
类中所有的private方法都是隐式地指定为时final的。由于无法取用private方法,所以也就无法覆盖它。
可以对private方法添加final修饰词,但这并不能给该方法增加任何额外的意义。
3. final类
final类不能被继承,没有子类,final类中的方法默认是final的。如果这个类不需要有子类,
类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。