1. 程式人生 > >屬性名前兩個字母要麼都是大寫的要麼都是小寫的(當然數字與_、$算小寫)

屬性名前兩個字母要麼都是大寫的要麼都是小寫的(當然數字與_、$算小寫)

關於屬性名

“屬性名前兩個字母要麼都是大寫的 要麼都是小寫的”。。。。。。

為什麼這麼說呢?僅僅是因為規範麼?人生若只如初見該多好,那就挺聽一個對java的初見小菜鳥根據感受娓娓道來吧。。。。

剛開始接觸java時認為宣告的全域性變數就是物件的屬性,當然這也是最初的定義,老師剛開始也這麼講。於是通過對屬性的賦值操作來改變物件的狀態。

當然沒過多久,就明白了面向物件的一個特性--》封裝性。這時才明白,不能像之前那麼隨心所遇的改變物件的狀態了,要通過gettersetter 進行對應的訪問,當然這也是必須的,因為沒有物件願意把自己的隱私全部暴露出來,沒有哪個Person類的物件願意把性別設定成 男、女之外其他的什麼。。。

再後來,便一步步陷入java的深淵,開始解除令人驚歎不已的反射機制了,這也算是java作為強大的動態語言的根本所在吧。我們可以在執行時對記憶體中的物件一覽無餘,當然也是因為記憶體中有他對應的類的Class例項,也就對他的類結構瞭如指掌了。 

甚至可以獲取、操作私有的結構,包括私有化的屬性,記得有一個好問的同學說了一句: ‘我們就這麼就獲取到了千辛萬苦私有化的屬性,這不違背了封裝性了’。不錯如果真 的直接這樣對屬性進行賦值了,的確是違背了封裝性,資料又不安全了。

但是反射機制是無法避免的,雖然物件不小心暴露他的這些隱私了,但是我們可以裝作不知道麼,最起碼尊重一下他人,當然這也是最安全的做法,沒準稍微好奇一下他就或死或殘了呢。所以我們可以繼續裝作獲取不到這些屬性,可以按照封裝性的思想繼續通過getter setter

訪問不是極好麼?

所以到現在學到一些框架、工具等物件,發現大量的反射,對屬性的操作當然也是通過getter setter訪問比較安全。 所以到這個階段所說的屬性基本上就指的是通過getter setter方法來定義的屬性 比如 setAge() 屬性就是age  setNumber() 屬性就是number

最初大家都知道,getter setter 前三個字母之後,第一個字母小寫,這便是屬性名了, 但是如果想定義了兩個欄位名是iDCard IDcard。他們的setter豈不是一樣了, 產 生了混淆。同樣idCardIdCard 根據setter方法也產生了混淆。因為長得一 樣, 但是java

只能做一個決定。所以通過這種setter方法定義的屬性名只能返回一種, 具 體怎麼返回,原始碼規則是這樣的:

if (str == null || str.length() == 0) {

return str;

}

if (str.length() > 1 && Character.isUpperCase(str.charAt(1))

&& Character.isUpperCase(str.charAt(0))) {

return str;

} else {

char ca[] = str.toCharArray();

ca[0] = Character.toLowerCase(ca[0]);

return new String(ca);

}

就是說,如果set後前兩個字母都大寫,那麼屬性值原樣返回,否則將首字母小寫返回。這樣的結果就是要麼前兩個字母都大寫,要麼都小寫。所以有了那句話,“屬性名前兩個字母要麼都是大寫 要麼都是小寫”,所以為了避免欄位與屬性的混淆,我們在欄位的命名上也儘量按照這一規則。在使用反射時,也要根據setter/getter賦值與取值。