1. 程式人生 > >java中的get和set方法(比較詳細)

java中的get和set方法(比較詳細)

屬性的訪問器包含與獲取(讀取或計算)或設定(寫)屬性有關的可執行語句。訪問器宣告可以包含 get 訪問器或 set 訪問器,或者兩者均包含。宣告採用下列形式之一:

set {accessor-body}
get {accessor-body}
其中:

accessor-body
包含將在呼叫訪問器時執行的語句的塊。
get 訪問器
get 訪問器體與方法體相似。它必須返回屬性型別的值。執行 get 訪問器相當於讀取欄位的值。以下是返回私有欄位 name 的值的 get 訪問器:

private string name; // the name field
public string Name // the Name property
{
get
{
return name;
}
}
當引用屬性時,除非該屬性為賦值目標,否則將呼叫 get 訪問器讀取該屬性的值。例如:

Employee e1 = new Employee();
...
Console.Write(e1.Name); // The get accessor is invoked here
get 訪問器必須在 return 或 throw 語句中終止,並且控制不能超出訪問器體。

set 訪問器
set 訪問器與返回 void 的方法類似。它使用稱為 value 的隱式引數,此引數的型別是屬性的型別。在下例中,set 訪問器被新增到 Name 屬性:

public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
當對屬性賦值時,用提供新值的引數呼叫 set 訪問器。例如:

e1.Name = "Joe"; // The set accessor is invoked here
在 set 訪問器中對區域性變數宣告使用隱式引數名 (value) 是錯誤的。




屬性按如下方式,根據所使用的訪問器進行分類:

只帶有 get 訪問器的屬性稱為只讀屬性。無法對只讀屬性賦值。
只帶有 set 訪問器的屬性稱為只寫屬性。只寫屬性除作為賦值的目標外,無法對其進行引用。
同時帶有 get 和 set 訪問器的屬性為讀寫屬性。
在屬性宣告中,get 和 set 訪問器都必須在屬性體的內部宣告。

使用 get 訪問器更改物件的狀態是一種錯誤的程式設計樣式。例如,以下訪問器在每次訪問 number 欄位時都產生更改物件狀態的副作用。

public int Number
{
get
{
return number++; // Don't do this
}
}
可以將 get 訪問器用於返回欄位值,或用於計算欄位值並將其返回。例如:

public string Name
{
get
{
return name != null ? name : "NA";
}
}
在上述程式碼段中,如果不對 Name 屬性賦值,它將返回值 NA。