final关键字的使用(Thinking In Java 读书笔记)

怎甘沉沦 提交于 2020-02-25 23:56:47

final关键字最基本的含义就是表明“这个东西不能改变”。之所以这样,可能是考虑到两方面的因素:设计或效率。

final关键字可应用在三种场合: 数据、方法以及类

1. final数据

表明某个数据是“常数”,永远不会改变。使用final定义,编译器可以直接将常数值封装到需要的计算过程里。也就是说,计算可以在编译期前执行,从而节省运行时的开销。在JAVA中,这些常数必须属于基本数据类型。并且在对这样的一个常数进行定义的时候,必须给出一个值。

而当对象句柄使用final时,必须将句柄初始化到一个具体的对象,而且永远不能将句柄指向另一个对象。然而,对象本身可以修改。

空白final

Java允许创建“空白final”。即不赋初始值,但空白final必须在实际使用前得到正确的初始化。如果将赋初始值的语句放在不同的构造器中,则final字段可以随着调用不同的构造器而获得不同的初始值。但一旦确定,值将无法改变。

final数据无法更改:

{
  final int i=5;
  i=6;
}

以上语句会在编译期间出错:
:cannot assign a value to final variable i=6;

final自变量

JAVA允许将自变量设成final属性。即在方法的变量列表中进行声明。这样意味着在一个方法内部,不能改变自变量句柄所指向的东西。

2. final 方法

将一个方法标识为final,则可防止任何继承类改变这个方法的本来含义。即不可被覆盖或改写。

同时将一个方法设置成final后,编译器可以把对那个方法的所有调用都嵌入到调用里,即采用常规的代码插入方法。因此可以提高程序效率。当然,如果方法体积太大,那么程序就会变的臃肿。

因此,通常只有在方法的代码量非常少,或者想明确禁止方法被覆盖的时候,才应考虑将一个方法设置为final 。

类中所有的private方法都自动成为final。因为我们不能从类外访问final方法,所以它绝对不会被其他方法覆盖。

3. final类

若在整个类定义前冠以final关键字,表明不希望从这个类继承。而final类的数据成员既可以是final的,也可以不是。因为final类禁止了继承,所以final类中的所有方法都默认为final。因为此时不可能覆盖它们。(当然可以再为final类中的方法添加final指示符号,但这样做没有任何意义)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!