刘志雄
[摘 要]final关键字在java中的应用至关重要。使用final关键字可以使JVM优化变量、方法和类,在多线程环境下,可以进行安全的共享,减少了同步开销。本文结合简单实例对final关键字在变量、方法与类中定义的用法进行了深入的剖析。
[关键词]final;java;变量;方法;类
从英语单词方面来看final的含义,有“最终的”“不可更改的”“决定性的”等意思。在java中,其也保留了此含义。final关键字可用于修饰类、变量和方法,它有“这是无法改变的”或者“最终”或者“终结”的含义,因此被final修饰的类、变量和方法具有以下特性:
1.final修饰的类不能被继承。我们可以把这样的类叫做“最终类”。
2.final修饰的方法不能被子类重写。我们把它叫做“最终方法”。
3.final修饰的变量是常量,只能赋值一次。
接下来,我们分别从以上三个方面一一用简单实例来讲解final关键字的用法。
一、final在变量定义中的用法
用例如下:
class animal {
final String name;
public void f(){
System.out.print(“这只动物名字叫:”+name);
}
public static void main(String[] args){
animal aa=new animal( );
aa.f();
}}
对代码进行编译时,出现如下错误提示:
这是因为使用final关键字修饰成员变量时,虚拟机不会对其进行初始化。因此使用final修饰成员变量时,需要在定义变量的同时赋予一个初始值,下面将第2行代码修改为:
final String name = "猫"; 为final关键字修饰的name属性赋值。但是,如果我们在第4行代码前加上语句:name=”狗”;这时编译结果为:
从以上情况说明final修饰变量时,必须对变量进行初化,一旦初化,该变量的值不能被改变,即常量。
二、final在方法定义中的用法
用例如下:
class animal {
final String name="猫";
final public void f(){
System.out.print(name);}
class dog extends animal{
void f(){
System.out.print("狗叫汪汪汪");
} }
public static void main(String[] args) {
dog as=new dog();
as.f();} }
对代码进行编译时,出现如下错误提示:
这是因为f()方法被final修饰了,dog子类不能重写父类里的f()方法。可见,final修饰的方法是该类里的“终结”方法,不能被重写,但是可以继承使用,即子类可以调用父类里final修饰的方法。
三、final在类定义中的用法
用例如下:
final class animal {
final String name="猫";
final public void f(){
System.out.print(name);}
class dog extends animal{
}
public static void main(String[] args) {
dog as=new dog();
as.f();} }
对代码进行编译,错误提示为:
这是因为animal类用final修饰了,一个类一旦用final修饰,那么这个类就不用有子类了,即final修饰的类为“最终类”。
四、结语
由以上叙述可知:final修饰的变量表示常量,定义里就得初始化,且只能被赋值一次,赋值后值不再改变;final修饰的方法不能被子类来重写,但是可以被子类继承,即子类可以直接调用父类里final修饰的方法;final修饰的类不能被继承,即该类不可能有子类。
参考文献:
[1] http://www.importnew.com/7553.html.
[2] 高永强,Java编程艺术[M].北京:清华大学出版社,2009.
[3] 王善发,吴道荣,Java編程中static和final关键字的陷阱,保山学院学报,2012,31(5):19-22.
[4] 安博教育集团,Java核心技术[M].北京:电子工业出版社,2012.
基金项目:湖南省教育科学“十三五”规划2017年度课题:XJK17BGD083 。endprint