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类。