現(xiàn)在業(yè)界java代碼的規(guī)范比較混亂,阿里巴巴開發(fā)整理的阿里巴巴Java開發(fā)手冊(cè)能夠促使整體行業(yè)代碼規(guī)范水平得到提高,使Java開發(fā)更高效、更加容錯(cuò)、更加具有協(xié)作性,提升協(xié)作效率,提高代碼質(zhì)量,降低代碼維護(hù)成本。
阿里巴巴Java開發(fā)手冊(cè)最新版給各位程序猿們帶來(lái)下載。
相關(guān)介紹:
《阿里巴巴Java開發(fā)手冊(cè)》是阿里巴巴的內(nèi)部編碼規(guī)范,阿里官方的Java代碼規(guī)范標(biāo)準(zhǔn), 手冊(cè)以Java應(yīng)用開發(fā)為維度,分為編程規(guī)約、異常日志規(guī)約、MYSQL規(guī)約、工程規(guī)約、安全規(guī)約五個(gè)章節(jié),給出了強(qiáng)制、推薦、參考三個(gè)級(jí)別,每條規(guī)范都有推薦的約束力度,從命名到項(xiàng)目拆分,不僅規(guī)范了一些開發(fā)細(xì)節(jié),也提出了很多工程開發(fā)的哲學(xué),值得好好閱讀。
阿里巴巴集團(tuán)推出的《阿里巴巴Java開發(fā)手冊(cè)(正式版)》是阿里巴巴近萬(wàn)名開發(fā)同學(xué)集體智慧的結(jié)晶,以開發(fā)視角為中心,詳細(xì)列舉如何開發(fā)更加高效、更加容錯(cuò)、更加有協(xié)作性,力求知其然,更知其不然,結(jié)合正反例,讓Java開發(fā)者能夠提升協(xié)作效率、提高代碼質(zhì)量。
部分提綱:
一、編程規(guī)約
1.如果使用到了設(shè)計(jì)模式,建議在類名中體現(xiàn)出具體模式
將設(shè)計(jì)模式體現(xiàn)在名字中,有利于閱讀者快速理解架構(gòu)設(shè)計(jì)思想。
2.相同參數(shù)類型,相同業(yè)務(wù)含義,才可以使用 Java 的可變參數(shù),避免使用 Object
可變參數(shù)必須放置在參數(shù)列表的最后,盡量不用可變參數(shù)編程。
3.對(duì)外暴露的接口簽名,原則上不允許修改方法簽名,避免對(duì)接口調(diào)用方產(chǎn)生影響
接口過(guò)時(shí)必須加@Deprecated 注解,并清晰地說(shuō)明采用的新接口或者新服務(wù)是什么。
4.關(guān)于基本數(shù)據(jù)類型與包裝數(shù)據(jù)類型的使用標(biāo)準(zhǔn)如下
1) 所有的POJO類屬性必須使用包裝數(shù)據(jù)類型
2) RPC方法的返回值和參數(shù)必須使用包裝數(shù)據(jù)類型
3) 所有的局部變量【推薦】使用基本數(shù)據(jù)類型
POJO 類屬性沒(méi)有初值是醒使用者在需要使用時(shí),必須自己顯式地進(jìn)行賦值,任何 NPE 問(wèn)題,或者入庫(kù)檢查,都由使用者來(lái)保證。數(shù)據(jù)庫(kù)的查詢結(jié)果可能是null,因?yàn)樽詣?dòng)拆箱,用基本數(shù)據(jù)類型接收有NPE風(fēng)險(xiǎn)。
5.注意 serialVersionUID 不一致會(huì)拋出序列化運(yùn)行時(shí)異常
序列化類新增屬性時(shí),請(qǐng)不要修改 serialVersionUID 字段,避免反序列失敗;如果完全不兼容升級(jí),避免反序列化混亂,那么請(qǐng)修改 serialVersionUID 值。
6.POJO 類必須寫 toString 方法
使用 IDE 的中工具:source> generate toString 時(shí),如果繼承了另一個(gè) POJO 類,注意在前面加一下 super.toString。 在方法執(zhí)行拋出異常時(shí),可以直接調(diào)用 POJO 的 toString()方法打印其屬性值,便于排查問(wèn)題。
7.final 可提高程序響應(yīng)效率,聲明成 final 的情況:
1) 不需要重新賦值的變量,包括類屬性、局部變量
2) 對(duì)象參數(shù)前加final,表示不允許修改引用的指向
3) 類方法確定不允許被重寫
8.慎用 Object 的 clone 方法來(lái)拷貝對(duì)象
對(duì)象的 clone 方法默認(rèn)是淺拷貝,若想實(shí)現(xiàn)深拷貝需要重寫 clone 方法實(shí)現(xiàn)屬性對(duì)象 的拷貝。
9.類成員與方法訪問(wèn)控制從嚴(yán)
1) 如果不允許外部直接通過(guò)new來(lái)創(chuàng)建對(duì)象,那么構(gòu)造方法必須是private
2) 工具類不允許有public或default構(gòu)造方法
3) 類非static成員變量并且與子類共享,必須是protected 4) 類非static成員變量并且僅在本類使用,必須是private
5) 類static成員變量如果僅在本類使用,必須是private
6) 若是static成員變量,必須考慮是否為final
7) 類成員方法只供類內(nèi)部調(diào)用,必須是private
8) 類成員方法只對(duì)繼承類公開,那么限制為protected
任何類、方法、參數(shù)、變量,嚴(yán)控訪問(wèn)范圍。過(guò)寬泛的訪問(wèn)范圍,不利于模塊解耦。思考:如果是一個(gè) private 的方法,想刪除就刪除,可是一個(gè) public 的 Service 方法,或者一個(gè) public 的成員變量,刪除一下,不得手心冒點(diǎn)汗嗎?變量像自己的小孩,盡量在自己的視線內(nèi),變量作用域太大,如果無(wú)限制的到處跑,那么你會(huì)擔(dān)心的。
10.ArrayList的subList結(jié)果不可強(qiáng)轉(zhuǎn)成ArrayList,否則會(huì)拋出ClassCastException 異常
subList 返回的是 ArrayList 的內(nèi)部類 SubList,并不是 ArrayList ,而是 ArrayList 的一個(gè)視圖,對(duì)于SubList子列表的所有操作最終會(huì)反映到原列表上。
新版改動(dòng):
1、增加手冊(cè)前言;
2、增加版本歷史;
3、增加專有名詞解釋。
- PC官方版
- 安卓官方手機(jī)版
- IOS官方手機(jī)版