回望Java中的final关键字
final关键字可以理解为“这个东西不能改变”。之所以要禁止改变,可能是因为实际业务情况需要或者效率或者设计因素,比如说应用中的全局变量我们经常将其用static加final关键字声明保证不能改变且该类的所有对象只有一份。在声明为final的地方有成员变量、方法、类。
?
final成员变量:
往往我们在用final声明为是常数数据的时候,可以分为编译期的常数数据和运行期的常数数据。
什么叫编译期的常数数据?是指在程序在编译期间已经将数据通过过程的形式存在了class文件中了,这部分数据在不需要在运行期间去执行,相当于节省了一部分开销,这类数据必须是属于基本数据类型(boolean、byte、char、short、int、float、long、double)且必须赋予一个初始值这样一经初始化就在编译期间设定了不能再改变。这类变量的声明我们习惯性的用大写来命名。
final class FinalFather {//final int a = 5;int a = 5;public void say(String str){//默认也是带有final的System.out.println(str);}}//class FinalChild extends FinalFather{}//编译不通过public class FinalTest{public static void main(String[] args) {FinalFather f = new FinalFather();f.a=10;//如果把FinalFather中的a声明为final则编译不通过说明final类的成员变量是没有加自动加上fianl的只有方法自动加上了final限制System.out.println(f.a);}}?
设计一个类时,往往需要考虑是否将一个方法设为final。可能会觉得使用自己的类时执行效率非常重要,没有人能覆盖自己的方法。这种想法在某些时候是正确的。但要慎重作出自己的假定。通常,我们很难预测一个类以后会以什么样的形式再生或重复利用。常规用途的类尤其如此,若将一个方法定义成final,就杜绝了在其他程序员的项目中对自己的类进行继承的途径。
?
?
1 楼 eve 2012-09-03 both and 跟 either or都分不清的人 怎么翻译书的哇 what a daddy trap!!! 2 楼 hegang 2012-09-11 总结的不错啊