final實例域 實例域(對象的屬性)可修飾為final。修飾為final後,在構建對象時必須初始化這個實例域。若沒有在實例域進行初始化,那麼必須在每個構造器內初始化這個實例域(否則會編譯錯誤)。 表明在後面的操作中,不能夠再對它進行修改。即沒有對應的域更改器(set)方法. final修飾大部分都 ...
final實例域
實例域(對象的屬性)可修飾為final。修飾為final後,在構建對象時必須初始化這個實例域。若沒有在實例域進行初始化,那麼必須在每個構造器內初始化這個實例域(否則會編譯錯誤)。
表明在後面的操作中,不能夠再對它進行修改。即沒有對應的域更改器(set)方法.
final修飾大部分都是應用於基本類型域(基本數據類型)或者不可變類的域(例如:String類),若修飾可變的類,可能會對讀者造成混亂。
靜態域與靜態方法 static
靜態域
static修飾的屬性稱為靜態域,它是屬於類的,所以也稱為類域。每個類中只有一個這樣的靜態域。不管你new 多少次對象,他們都是共用這個靜態域,
所以靜態域是屬於類的,不屬於對象。可以看下圖:
我把nextId設置為靜態域,userId為私有數據域。在調用set方法的時候,nextId都會自增1。下麵為測試方法和結果:
可以看到UserInfo類的nextId 在u1 和 u2中都是共用的。當其中一個對象修改nextId,那麼其他對象的nextId也會跟著修改。
靜態常量
上述所說的是靜態變數,一般比較少用,用的比較多的是靜態常量,就是使用final 和 static修飾的屬性。
例如,Math.PI(圓周率),使用方法為 類名.屬性名 靜態常量一般修飾不可變的實例域。
在上一章封裝性說過最好對實例域設置為私有域(private)。而final修飾的常量則沒有問題,可以修飾為公有域(public)。因為final域是不可變的。
靜態方法
使用靜態方法時,並不需要實例化對象。使用方法為 類名.方法名 例如 UserInfo.getNextId方法
使用getNextId方法時,不使用任何的UserInfo對象,就是說不會使用到它的私有數據域,可以訪問其靜態域。而上述說過靜態域是屬於類的,不屬於任何對象。
一般在下麵兩種情況下使用靜態方法:
1.一個方法不需要訪問對象的狀態,所需的參數都不會使用到私有數據域。
2.一個方法只需要訪問類的靜態域
木木只是一個小白,若那裡寫的不好或者有更好的建議,請留言 或 發到我的QQ郵箱 [email protected] 。謝謝大家啦~(*^▽^*)