Java中的屬性和欄位有什麼差別?
Java中的屬性(property),通常可以理解為get和set方法。
而欄位(field),通常叫做“類別成員”,或 "類別成員變數”,有時也叫“域”,理解為“資料成員”,用來承載資料的。
欄位(field)
#類別成員(欄位),通常是在類別中定義的類別成員變數,
例如:
public class A{ private String s = "123"; }
我們可以說A類別中有一個成員變數叫做s,A類別有一個欄位s 。
欄位一般用來承載數據,所以為了安全性,一般定義為私有的。
欄位和常數描述了類別的資料(域),當這些資料的某些部分不允許外界存取時,
根據「物件封裝」 的原則,應盡量避免將一個類型的欄位以公有方式提供給外部。除了final修飾的常數。
一般將其設定為private類型。既然是私有,那外界要怎麼存取呢? 當然是透過Java的屬性方法!
屬性(property)
屬性只限於類別中方法的聲明,不與類別中其他成員相關,屬於JavaBean的範疇。
例如:
void setA(String s){} String getA(){}
當一個類別中擁有這樣一對方法時,我們可以說,這個類別中擁有一個可讀寫的a屬性(注意是小寫a)。如果去掉了set的方法,則是可讀屬性,反之亦然。
其規則是:去掉get或set後其剩餘的字串
總結:
區別開屬性與欄位是為了更好的實現資料安全,例如當我們想給一個類別的屬性賦值或其他類別到了,就需要將這個欄位設為public,然而這樣可以對欄位進行任意的讀寫操作,非常不利於資料安全。於是就加上了屬性,簡單說屬性實作了字段的封裝,屬性有get、set 方法來控製字段,該字段的屬性只有set方法沒有get方法,就只可以對該方法進行賦值操作,沒有讀取操作,反之亦然。就是對對字段的操作透過屬性來控制。
可以建立屬性,將欄位和屬性封裝在一起。透過屬性可以像存取欄位一樣存取資料成員,實現資料的封裝,避免使用非法資料賦值,確保資料完整性,同時類別內部發生修改時,避免整個程式的修改。
基於get,set方法的反射不會破壞物件數據,IDE可以透過約定做些智慧提示。如果你自己用反射,你想做些通用處理,去遍歷每個字段,沒人跟你說哪個字段能寫,那個能讀,你沒辦法處理嘛。
以上是java字段是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!