阿里巴巴java開(kāi)發(fā)手冊(cè)第一章

命名不能以下劃線(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)心的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容