劉志雄
[摘 要]final關(guān)鍵字在java中的應(yīng)用至關(guān)重要。使用final關(guān)鍵字可以使JVM優(yōu)化變量、方法和類,在多線程環(huán)境下,可以進(jìn)行安全的共享,減少了同步開銷。本文結(jié)合簡單實(shí)例對final關(guān)鍵字在變量、方法與類中定義的用法進(jìn)行了深入的剖析。
[關(guān)鍵詞]final;java;變量;方法;類
從英語單詞方面來看final的含義,有“最終的”“不可更改的”“決定性的”等意思。在java中,其也保留了此含義。final關(guān)鍵字可用于修飾類、變量和方法,它有“這是無法改變的”或者“最終”或者“終結(jié)”的含義,因此被final修飾的類、變量和方法具有以下特性:
1.final修飾的類不能被繼承。我們可以把這樣的類叫做“最終類”。
2.final修飾的方法不能被子類重寫。我們把它叫做“最終方法”。
3.final修飾的變量是常量,只能賦值一次。
接下來,我們分別從以上三個方面一一用簡單實(shí)例來講解final關(guān)鍵字的用法。
一、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();
}}
對代碼進(jìn)行編譯時(shí),出現(xiàn)如下錯誤提示:
這是因?yàn)槭褂胒inal關(guān)鍵字修飾成員變量時(shí),虛擬機(jī)不會對其進(jìn)行初始化。因此使用final修飾成員變量時(shí),需要在定義變量的同時(shí)賦予一個初始值,下面將第2行代碼修改為:
final String name = "貓"; 為final關(guān)鍵字修飾的name屬性賦值。但是,如果我們在第4行代碼前加上語句:name=”狗”;這時(shí)編譯結(jié)果為:
從以上情況說明final修飾變量時(shí),必須對變量進(jìn)行初化,一旦初化,該變量的值不能被改變,即常量。
二、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();} }
對代碼進(jìn)行編譯時(shí),出現(xiàn)如下錯誤提示:
這是因?yàn)閒()方法被final修飾了,dog子類不能重寫父類里的f()方法。可見,final修飾的方法是該類里的“終結(jié)”方法,不能被重寫,但是可以繼承使用,即子類可以調(diào)用父類里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();} }
對代碼進(jìn)行編譯,錯誤提示為:
這是因?yàn)閍nimal類用final修飾了,一個類一旦用final修飾,那么這個類就不用有子類了,即final修飾的類為“最終類”。
四、結(jié)語
由以上敘述可知:final修飾的變量表示常量,定義里就得初始化,且只能被賦值一次,賦值后值不再改變;final修飾的方法不能被子類來重寫,但是可以被子類繼承,即子類可以直接調(diào)用父類里final修飾的方法;final修飾的類不能被繼承,即該類不可能有子類。
參考文獻(xiàn):
[1] http://www.importnew.com/7553.html.
[2] 高永強(qiáng),Java編程藝術(shù)[M].北京:清華大學(xué)出版社,2009.
[3] 王善發(fā),吳道榮,Java編程中static和final關(guān)鍵字的陷阱,保山學(xué)院學(xué)報(bào),2012,31(5):19-22.
[4] 安博教育集團(tuán),Java核心技術(shù)[M].北京:電子工業(yè)出版社,2012.
基金項(xiàng)目:湖南省教育科學(xué)“十三五”規(guī)劃2017年度課題:XJK17BGD083 。endprint