java學習筆記4 不可變類

2021-06-19 17:50:01 字數 1004 閱讀 1691

class name

public name(string firstname , string lastname)

public void setfirstname(string firstname)

public string getfirstname()

public void setlastname(string lastname)

public string getlastname() }

public class person

public name getname()

public static

void main(string args)

}這樣就破壞了設計person類的初衷。為了保持person物件的不變性,必須保護好person物件的引用型別成員變數:name,讓程式無法訪問到person物件的name成員變數。修改如下:

//使用提供的setter,getter方法可以保護父類中的成員變數不被修改

//因為n物件肯定是被修改了的,這裡就是不用n物件了,另外又建立了乙個name物件

public person(name name)

public name getname()

當程式向person構造器傳入乙個name物件時,改構造器建立person物件時並不直接利用已有的name物件,(利用已有的name物件有風險,因為這個已有的name物件可變,如果程式改物件的name成員變數,將會導致person物件發生變化)而是重新建立乙個name物件來賦給person物件的name成員變數。當person物件返回name成員變數時,並沒有直接把name成員變數返回,直接繁華name成員變數的值也可能導致它所引用的name物件被修改。

這樣改,只是防止n物件修改時p物件也被修改了。最大的不同就是形參接收修改後的n物件後,之前的就是用修改後的n來返回給name成員變數,而新的是重新建立了乙個新的name物件,賦給name成員變數,保證了p物件沒有受到n物件修改時的影響。

Java 不可變物件

不可變物件 1 一旦建立,物件的狀態就不能被修改,任何的修改都會建立乙個新的物件 2 類和類屬性都應該是final型別 3 如果裡面含有非immutable物件,那麼客戶端的呼叫都應該返回乙個該物件的拷貝 不可變物件的好處 1 執行緒安全 2 建立的物件可以做快取處理,使用靜態工廠方法valueof...

6 4 7 不可變類

1.使用private和final修飾符來修飾該類的成員變數 2.提供帶引數構造器,用於提供傳入引數來初始化類裡的成員變數 3.僅為該類的成員變數提供getter方法 4.重寫object類的hashcode 和equals 方法。package chap6 4 class immutablestr...

Java中單例類和不可變類的理解

1.如果乙個類始終只能建立乙個例項,則這個類被稱為單例類。思路 public static void main string args 不建立例項,而是引用類中方法內建立的例項。建立乙個新物件,使用new,就要使用建構函式。既然是單例,就不能使用建構函式來建立 於是將類中建構函式許可權設定為priv...