基于简单实例的final关键字深入剖析

2018-03-23 12:21钟旭
新教育时代·教师版 2018年2期
关键词:面向对象

钟旭

摘 要:Java中的final关键字在面向对象编程中起着非常重要作用,它可以用于变量、方法以及类,但是用得最多的是修饰变量。另外,final关键字经常和static关键字一起使用来修饰变量,声明该变量是常量。那么,final到底是如何来改善应用性能的呢?本文将结合实例对final关键字修饰变量进行深入剖析。

关键词:final 基本数据 引用数据 面向对象

引言

final修饰的类、变量和方法具有以下特性:

1.final修饰的类不能被继承。

2.final修饰的方法不能被子类重写。

3.final修饰的变量(成员变量和局部变量)是常量,只能赋值

一次。

一、final修饰基本数据类型与引用数据类型的区别

修饰变量是final用得最多的地方,数据类型有基本数据类型与引用数据类型,当final修饰基本数据类型时,被修饰的数据就相当于我们自己直接定义的常量,理解与应用与一致,但当修饰引用数据类型变量时,会有所不同,这是本文接下来要重点阐述的内容。首先了解一下final变量的基本语法:对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。 接下来举个例子深入分析final关键字修饰引用类型数据的性能:

class Test111 {

public static void main(String[] args) {

String as=”java2”;

final String ab=”java”;

String aa=”java”;

String w=ab+2;

String h=aa+2;

System.out.println((as==w));

System.out.println((as==h));

}}

上述代码运行结果为:

分析上述输出结果可知,就final修饰基本数据而言,我们会得出第一个输出结果应该也是false,因为final修饰变量时,就相当于常量。但输出结果却相反。实际第一个输出结果为true,而第二个结果为fasle。这里面就是final变量和普通变量的区别了,当final变量是基本数据类型以及String类型时,如果在编译期间能知道它的确切值,则编译器会把它当做编译期常量使用。也就是说在用到该final变量的地方,相当于直接访问的这个常量,不需要在运行时确定。因此在上面的一段代码中,由于变量b被final修饰,因此会被当做编译器常量,所以在使用到b的地方会直接将变量b替换为它的值。而对于变量d的访问却需要在运行时通过链接来进行。

二、final修饰引用类型对像变量

在上面提到被final修饰的引用变量一旦初始化赋值之后就不能再指向其他的对象,那么该引用变量指向的对象的内容是否可变呢?下面通过实例验证。

public class Test22 {

public static void main(String[] args) {

final Myclass dd=new Myclass();

System.out.println(++dd.i);

}}

class Myclass{

public int i=0;

}

运行结果为:

由运行结果可知,final修饰的引用变量一旦初始化赋值之后就不能再指向其他的对象,那么该引用变量指向的对象的内容是可变的。

结语

总上所述,Final关键字在修饰变量时,该变量就为常量,这是针对基本数据类型而言的,我们要区分及深入理解分析final修飾引用类型数据时,其起的应用性能。另外,很多时候会容易把static和final关键字混淆,static作用于成员变量用来表示只保存一份副本,而final的作用是用来保证变量不可变,final比static更加专一。

参考文献

[1]http://www.cnblogs.com/beanmoon/archive/2012/04/25/2470298.html

[2] 安博教育集团,Java核心技术[M].北京:电子工业出版社,2012

[3] 高永强,Java编程艺术[M].北京:清华大学出版社,2009.

[4] 王善发,吴道荣,Java编程中static和final关键字的陷阱,保山学院学报,2012,31(5):19-22

猜你喜欢
面向对象
面向对象方法在水蓄冷PLC编程中应用分析
基于python的面向对象传感器库类抽象方法
面向对象的计算机网络设计软件系统的开发
面向对象的数据交换协议研究与应用
面向对象Web开发编程语言的的评估方法
基于面向对象的Office评测系统的分析
峰丛洼地农作物面向对象信息提取规则集
基于E-cognition的面向对象的高分辨率遥感图像分类研究
基于面向对象的车辆管理软件的研制与开发
面向对象的SoS体系结构建模方法及应用