final 数据

来源:互联网 发布:linux sftp 编辑:程序博客网 时间:2024/05/29 16:05

可能用到final的三种情况:数据,方法,类

一 final 数据

      向编译器告知一块数据是恒定不变的。比如:

      (1) 一个永不改变的“编译时常量”。

      (2)一个在运行时被初始化的值,而你不希望它被改变。

对编译时常量这种情况,编译器可以将该常量值代入任何可能用到它的计算式中,也就是说,可以在编译时执行计算式,这就减轻了运行时的负担。在java中,这些常量必须是基本数据类型,并且以关键字final表示,在对这个常量进行定义的时候,必须赋值。

一个既是static又是final的字段,只占据一段不能改变的存储空间。

当对对象引用而不是基本类型运用final时,其含义会有一定的模糊。对于基本类型,final是数值恒定不变;而对于对象引用,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把此引用指向另外一个对象。然而,此对象本身是可以被修改的,java并未提供使任何对象恒定不变的途径。

二 final 方法

使用final方法的原因有两个。第一个原因是把方法锁定,以防任何方法修改它的含义。

 第二个原因是效率。如果一个方法声明为final,就是同意编译器将针对该方法的所有调用,转为内嵌调用(相识于C++中的内联函数)。当编译器发现一个final方法调用的时候,它会根据自己的判断,跳过插入程序代码这种正常的执行方式,而执行方法调用机制,并且以方法体中的实际代码的副本来替代方法调用。

是否内嵌,由编译器决定。

三 final 类

表明不打算让该类被继承