劉志雄
[摘 要]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