java基础提高篇--final关键字

在程序设计中,我们希望我们设计的部分不能够改变,这时候就会用到final关键字,被final修饰的部分是不允许修改的部分,不想被修改的原因一般是效率和设计。数据、方法、类会使用到final关键字。

    一、数据

有时数据不能够改变是非常有用的,这样就可以减轻系统运行的负担,提高我们程序的运行效率。使用final修饰的数据我们称之为“常量”。常量主要应用在两个地方:

(1)、编译期的常量,永远不会被修改;

(2)、运行期的常量,希望初始化的时候不被修改。

对于编译期的常量,在类加载完,已经完成了初始化,我们不能再对其修改,它可以被运用到任何的计算式中。编译期的常量定义的数据类型只能是基本数据类型,必须在定义的时候被初始化。

有时,我们希望我们引用不同的对象,他所表现的内容不同,这个时候我们就用到了运行时的常量。运行时的常量使用的数据类型可以是基本数据类型,内容可以改变,也可以是引用类型,该引用指向的内存地址是不能改变的,可以改变的是这个引用所表现的内容。

例子:

java基础提高篇--final关键字_第1张图片

java基础提高篇--final关键字_第2张图片

java基础提高篇--final关键字_第3张图片

  二、方法

如果一个方法使用了final关键词修饰,那么这个方法是不允许被继承和修改的,这样保证了方法的安全性。另一

个原因就是效率问题,java的早期实现中,如果将一个方法指明为final,就是同意编译器将针对该方法的所有调用都

转为内嵌调用。当编译器发现一个final方法调用命令时,它会根据自己的谨慎判断,跳过插入程序代码这种正常的调

用方式而执行方法调用机制(将参数压入栈,跳至方法代码处执行,然后跳回并清理栈中的参数,处理返回值),并

且以方法体中的实际代码的副本来代替方法调用。这将消除方法调用的开销。当然,如果一个方法很大,你的程序代

码会膨胀,因而可能看不到内嵌所带来的性能上的提高,因为所带来的性能会花费于方法内的时间量而被缩减。

父类中用final修饰的方法,子类是不允许进行修改的。

    三、类

如果一个类使用了final关键词进行修饰,那么这个类是不允许被继承和修改的,这个类的变量可以是final修饰也可以是普通变量,数据的final规则适用于这个类中使用final修饰的变量。这个类中的方法默认都是使用final来修饰的,从它不能被继承就可以看出。

    四、参数

在实际的应用中,final不仅可以修饰数据、方法和类,它同样可以修饰方法的参数,一旦修饰这个方法的参数就不能更改,就是说这个方法不能被重载,一旦参数改变,就会报错。

final修饰的参数在内部类也是非常有用的。在匿名内部类中,它的方法需要在内部类中使用,那么这个方法的参数必须使用fianl修饰。

    五、static和final

在实际运用中,我们常常会将static和final一起使用,修饰成员变量和成员方法,修饰的变量是一旦赋值是不可以更改的,成员方法是不可以被继承和修改的。

你可能感兴趣的:(java基础)