一些java修飾符的解釋

final 實例域

將實例域定義爲final意味着構建對象時必須初始化它,即構造器執行後這個域必須有值,且後續不可以進行修改。

final修飾符大都用於基本類型域或不可變類(類中的每個方法都不會修改對象,例如String類)的域。

對於可變類,使用final僅僅表示變量對於對象的引用不會發生變化,但是對象可以調用自己的方法來改變,從而容易產生混淆。

static 靜態域和靜態方法

在絕大多數面向對象程序設計語言中,靜態域被稱爲類域。static只是沿用了C++的叫法,沒有實際意義。

靜態域(靜態變量)

每個類中只可以有一個這樣的域的實例(就是說,所有的對象共享一個靜態域)。

靜態變量可以直接獲得,比如Employee.numOfEMP

靜態常量

常量名全大寫

定義的靜態常量可以直接獲得,比如Math.PI可以獲得靜態常量PI的值。

靜態常量可以設計爲public,因爲沒有對象可以修改它。

靜態方法

靜態方法是一種不能向對象實施操作的方法,也即沒有隱式的參數。

隱式參數和顯式參數

顯式參數也即括號中的參數,隱式參數爲調用方法的對象。

比如,AProject.getSth(a,b),a,b是顯式參數,AProject是隱式參數。

靜態方法直接使用類名.方法名來調用(實際上,也可以通過對象名.方法名來調用,但實際上和對象毫無關係,容易造成混淆)。

兩種情況使用靜態方法:
1. 方法不需要對象的狀態,所需參數全部爲顯式參數提供。
2. 方法只需要訪問類的靜態域,例如Emplyoyee.getNextId,即靜態域。

靜態方法的另一個應用:工廠方法

工廠方法,即使用靜態方法來構造對象。

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();

currencyFoematter.format(10);

使用靜態方法而不是構造器的原因:
1. 無法命名構造器。而靜態方法可以有不同的名字。
2. 使用構造器無法改變所構造的對象類型,而靜態方法可以返回不同的對象,比如子類。

另一個常見的靜態方法:main方法

每一個類都可以有一個main方法,這是常用於單元測試的技巧。

可以在所有需要進行單元測試的類添加main方法,執行的時候可以選擇執行哪一個main。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章