命名不能以下劃線(xiàn)或美元進(jìn)行開(kāi)始和結(jié)尾
//反面教材
private String _name;
private Integer $Object;
private boolean name_;
private BigDecimal Object$;
禁止使用拼音和英文的并用,禁止直接使用拼音和中文(知名的拼音等同于英文)
//反面教材
private String DaZhePromotion;//[打折]
//正面教材
private String taobao;
需要使用駝峰樣式的命名
1).類(lèi)名,MarcoPolo,但是類(lèi)名的開(kāi)頭必須為大寫(xiě)
2).方法名
3).參數(shù)名
4).成員變量
5).局部變量
常量全部大寫(xiě),單詞之間用下劃線(xiàn)隔開(kāi)
//正面教材
private String MAX_STOCK_COUNT;
DTO,POJO,JO類(lèi)中布爾型的成員變量不要以is開(kāi)頭
說(shuō)明:定義為基本數(shù)據(jù)類(lèi)型Boolean isDeleted的屬性,它的方法也是isDeleted(),RPC框架在反向解析的時(shí)候,“以為”對(duì)應(yīng)的屬性名稱(chēng)是 deleted,導(dǎo)致屬性獲取不到,進(jìn)而拋出異常。
數(shù)組定義時(shí),中括號(hào)放置在類(lèi)型后面,禁止放置在變量名后面
//正面教材
String[] params = new String[5];
對(duì)于使用了設(shè)計(jì)模式的類(lèi)在命名時(shí)要體現(xiàn)
//正面教材
class OrderFactory:工廠(chǎng)模式
class LoginProy:代理模式
class ResourceObserver:觀(guān)察者模式
對(duì)于long長(zhǎng)整型的定義禁止使用l,要使用L
//反面教材
private longa = 2l;//像這樣的定義在一定程度上會(huì)與數(shù)字21混淆
類(lèi)內(nèi)部定義方法的順序(推薦)
公有方法或保護(hù)方法 > 私有方法 > getter/setter 方法
說(shuō)明:公有方法是類(lèi)的調(diào)用者和維護(hù)者最關(guān)心的方法,首屏展示最好;保護(hù)方法雖然只是子類(lèi)
關(guān)心,也可能是“模板設(shè)計(jì)模式”下的核心方法;而私有方法外部一般不需要特別關(guān)心,是一個(gè)
黑盒實(shí)現(xiàn);因?yàn)榉椒ㄐ畔r(jià)值較低,所有Service和DAO的getter/setter方法放在類(lèi)體最
后。
接口的名字要以Impl結(jié)尾
如InterfaceMethodNameStyleImpl
接口的名字也可以如此命名:以I(大寫(xiě)的i)開(kāi)頭,以Service結(jié)尾,如IUserService
接口中的方法和屬性不要加任何的修飾符
//反面教材
public void f();
public String xxx = "hello world";
//正面教材
void update();
Object的equals方法容易拋空指針異常,應(yīng)使用常量或確定有值的對(duì)象來(lái)調(diào)用equals
所有的相同類(lèi)型的包裝類(lèi)對(duì)象之間值的比較,全部使用equals方法比較
說(shuō)明:對(duì)于Integer var= ?在-128至127范圍內(nèi)的賦值,Integer對(duì)象是在IntegerCache.cache產(chǎn)生,會(huì)復(fù)用已有對(duì)象,這個(gè)區(qū)間內(nèi)的Integer值可以直接使用==進(jìn)行判斷,但是這個(gè)區(qū)間之外的所有數(shù)據(jù),都會(huì)在堆上產(chǎn)生,并不會(huì)復(fù)用已有對(duì)象,這是一個(gè)大坑,推薦使用equals方法進(jìn)行判斷。
循環(huán)體內(nèi),字符串的連接方式,使用StringBuilder的append方法進(jìn)行擴(kuò)展。
說(shuō)明:反編譯出的字節(jié)碼文件顯示每次循環(huán)都會(huì)new出一個(gè)StringBuilder對(duì)象,然后進(jìn)行append操作,最后通過(guò)toString方法返回String對(duì)象,造成內(nèi)存資源浪費(fèi)。
類(lèi)成員與方法訪(fǎng)問(wèn)控制從嚴(yán)
1)如果不允許外部直接通過(guò)new來(lái)創(chuàng)建對(duì)象,那么構(gòu)造方法必須是private。2)工具類(lèi)不允許有public或default構(gòu)造方法。
3)類(lèi)非static成員變量并且與子類(lèi)共享,必須是protected。
4)類(lèi)非static成員變量并且僅在本類(lèi)使用,必須是private。
5)類(lèi)static成員變量如果僅在本類(lèi)使用,必須是private。
6)若是static成員變量,必須考慮是否為final。
7)類(lèi)成員方法只供類(lèi)內(nèi)部調(diào)用,必須是private。
8)類(lèi)成員方法只對(duì)繼承類(lèi)公開(kāi),那么限制為protected。
說(shuō)明:任何類(lèi)、方法、參數(shù)、變量,嚴(yán)控訪(fǎng)問(wèn)范圍。過(guò)于寬泛的訪(fǎng)問(wèn)范圍,不利于模塊解耦。
思考:如果是一個(gè)private的方法,想刪除就刪除,可是一個(gè)public的service方法,或者
一個(gè)public的成員變量,刪除一下,不得手心冒點(diǎn)汗嗎?變量像自己的小孩,盡量在自己的
視線(xiàn)內(nèi),變量作用域太大,如果無(wú)限制的到處跑,那么你會(huì)擔(dān)心的。