屬性名前兩個字母要麼都是大寫的要麼都是小寫的(當然數字與_、$算小寫)
關於屬性名
“屬性名前兩個字母要麼都是大寫的 要麼都是小寫的”。。。。。。
為什麼這麼說呢?僅僅是因為規範麼?人生若只如初見該多好,那就挺聽一個對java的初見小菜鳥根據感受娓娓道來吧。。。。
剛開始接觸java時認為宣告的全域性變數就是物件的屬性,當然這也是最初的定義,老師剛開始也這麼講。於是通過對屬性的賦值操作來改變物件的狀態。
當然沒過多久,就明白了面向物件的一個特性--》封裝性。這時才明白,不能像之前那麼隨心所遇的改變物件的狀態了,要通過getter、setter 進行對應的訪問,當然這也是必須的,因為沒有物件願意把自己的隱私全部暴露出來,沒有哪個Person類的物件願意把性別設定成 男、女之外其他的什麼。。。
再後來,便一步步陷入java的深淵,開始解除令人驚歎不已的反射機制了,這也算是java作為強大的動態語言的根本所在吧。我們可以在執行時對記憶體中的物件一覽無餘,當然也是因為記憶體中有他對應的類的Class例項,也就對他的類結構瞭如指掌了。
甚至可以獲取、操作私有的結構,包括私有化的屬性,記得有一個好問的同學說了一句: ‘我們就這麼就獲取到了千辛萬苦私有化的屬性,這不違背了封裝性了’。不錯如果真 的直接這樣對屬性進行賦值了,的確是違背了封裝性,資料又不安全了。
但是反射機制是無法避免的,雖然物件不小心暴露他的這些隱私了,但是我們可以裝作不知道麼,最起碼尊重一下他人,當然這也是最安全的做法,沒準稍微好奇一下他就或死或殘了呢。所以我們可以繼續裝作獲取不到這些屬性,可以按照封裝性的思想繼續通過getter setter
所以到現在學到一些框架、工具等物件,發現大量的反射,對屬性的操作當然也是通過getter setter訪問比較安全。 所以到這個階段所說的屬性基本上就指的是通過getter setter方法來定義的屬性 比如 setAge() 屬性就是age setNumber() 屬性就是number。
最初大家都知道,getter setter 前三個字母之後,第一個字母小寫,這便是屬性名了, 但是如果想定義了兩個欄位名是iDCard 跟IDcard。他們的setter豈不是一樣了, 產 生了混淆。同樣idCard跟IdCard 根據setter方法也產生了混淆。因為長得一 樣, 但是java
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賦值與取值。