故名思义,final即最后的,最终的,不可改变的。实际上,在java中,final的作用也基本上是这样的,其原因可能是出于效率或设计。final关键字可以应用于属性,方法和类。当然在这三个方面的应用是有细微差别的。
(1)final数据
使用final数据,目的是想告诉编译器这个数据一经初始化就不会再改变。
对于基本类型,final使数值恒定不变,一个既是static又是final的字段只占据一段不能改变的存储空间;而对于对象引用,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法在把他改为指向另一个对象,但对象自身是可改变的(同样适用于数组,其也是对象)。 |
带final的数据定义格式如下
public final int i = 0;
更一般的定义如下
public static final int VAL_STAT = 10;
对于如上的定义,要注意定义格式,带有恒定初始值(编译时刻变量,非运行时刻)的static final 基本类型全用大写字母命名,并且字与字之间用下划线隔开(这是规范)。
对于以上两种格式的定义,第二种更常用。
(1)final方法
使用final方法原因有两个。
第一,把方法锁定,任何继承类都不能修改它(不被覆盖)。
第二,效率。针对该方法的所有调用都转为
内嵌调用
。即在编译过程中,当编译器发现一个final方法调用时,它会以该final方法体中的实际代码的副本来代替方法调用,而不是传统的方法调用(本程序指针压栈,程序指针转向调用代码,执行后返回结果,原调用程序指针出栈)。
对于final方法,并不是很常用,所以这里不列出例子了。
(1)final类
使用final类的原因只有一个,就是你不打算继承该类,也不许其他人继承。这个类永远不需改变。
对于final方法和final类,最好慎用。即使你很牛,认为你的方法或类是万能的,不需继承修改。但你应该知道“应用是静止的,需求是变化的