JAVA開發(fā)學(xué)習(xí)筆記(編程規(guī)約)

該筆記出自于<<阿里巴巴 JAVA 開發(fā)手冊>>, 侵刪
主要記錄平時比較重要的而且又容易被忽視的規(guī)約, 方便速查

編程規(guī)約

(一) 命名風(fēng)格

  • 代碼中的命名均不能以下劃線或美元符號開始, 也不能以下劃線或美元符號結(jié)束

  • 代碼中的命名禁止使用拼音與中文混合的方式, 應(yīng)當(dāng)使用正確的英文拼寫,杜絕完全不規(guī)范的縮寫,避免望文不知義, 為了達(dá)到代碼自解釋的目標(biāo),任何自定義編程元素在命名時,使用盡量完整的單詞組合來表達(dá)其意。
    注 : alibaba/taobao等國際通用的名稱,可視同英文

  • 類名使用UpperCamelCase風(fēng)格,但以下情形例外:DO/ BO / DTO/ VO/ AO/ PO/ UID等。
    如UserDO

  • 方法名、參數(shù)名、成員變量、局部變量都統(tǒng)一使用lowerCamelCase風(fēng)格,必須遵從駝峰形式。

  • 常量命名全部大寫,單詞間用下劃線隔開,力求語義表達(dá)完整清楚,不要嫌名字長。

  • 抽象類命名使用Abstract或Base開頭

  • 異常類命名使用Exception結(jié)尾

  • 測試類命名以它要測試的類的名稱開始,以Test結(jié)尾。

  • 定義整形數(shù)組int[] arrayDemo

  • POJO類中布爾類型的變量,都不要加is前綴,否則部分框架解析會引起序列化錯誤。(重要)

  • 包名統(tǒng)一使用小寫, 單數(shù)形式

  • 類名如果有復(fù)數(shù)含義,類名可以使用復(fù)數(shù)形式

  • 如果模塊、接口、類、方法使用了設(shè)計模式,在命名時需體現(xiàn)出具體模式。
    如 public classOrder Factory;
      public class LoginProxy;

  • 接口類的方法和屬性不要添加任何的修飾符號(public 也不能添加), 以求保持代碼的簡潔性能,而且接口類的變量均為與接口方法相關(guān)的常量.

  • 接口和實現(xiàn)類的命名有兩套規(guī)則

對于Service和DAO類, 暴露出來的服務(wù)一定是接口,而其中的實現(xiàn)類命名以Impl為后綴

  • 枚舉類名建議帶上Enum后綴,枚舉成員名稱需要全大寫,單詞間用下劃線隔開

  • 各層命名規(guī)約整合

Service/DAO層方法命名規(guī)約

獲取單個對象的方法用get做前綴
獲取多個對象的方法用list做前綴,復(fù)數(shù)形式結(jié)尾如:listObjects
獲取統(tǒng)計值的方法用count做前綴
插入的方法用save/insert做前綴
刪除的方法用remove/delete做前綴
修改的方法用update做前綴

領(lǐng)域模型命名規(guī)約

數(shù)據(jù)對象:xxxDO,xxx即為數(shù)據(jù)表名
數(shù)據(jù)傳輸對象:xxxDTO,xxx為業(yè)務(wù)領(lǐng)域相關(guān)的名稱
展示對象:xxxVO,xxx一般為網(wǎng)頁名稱
POJO是DO/DTO/BO/VO的統(tǒng)稱,禁止命名成xxxPOJO

(二) 常量定義

  • 不允許任何魔法值(即未經(jīng)預(yù)先定義的常量)直接出現(xiàn)在代碼中

  • 在long或者Long賦值時,數(shù)值后使用大寫的L
    如: public Long data = 2L;

  • 不要使用一個常量類維護(hù)所有常量,要按常量功能進(jìn)行歸類,分開維護(hù)。

  • 常量的復(fù)用層次有五層:跨應(yīng)用共享常量、應(yīng)用內(nèi)共享常量、子工程內(nèi)共享常量、包內(nèi)共享常量、類內(nèi)共享常量。

跨應(yīng)用共享常量:放置在二方庫中,通常是client.jar中的constant目錄下。
應(yīng)用內(nèi)共享常量:放置在一方庫中,通常是子模塊中的constant目錄下。
子工程內(nèi)部共享常量:即在當(dāng)前子工程的constant目錄下。
包內(nèi)共享常量:即在當(dāng)前包下單獨的constant目錄下。
類內(nèi)共享常量:直接在類內(nèi)部private static final定義。

  • 如果變量值僅在一個固定范圍內(nèi)變化用enum類型來定義
    注:注意區(qū)分常量類和枚舉類的區(qū)別

(三) 代碼格式

對于代碼格式的規(guī)范,阿里巴巴給出了一個正例,這個例子基本囊括了所以基本的規(guī)范操作

public class Main {
    public static void main(String[] args) {
        // 注釋的雙斜線與注釋內(nèi)容之間有且僅有一個空格。
        // 縮進(jìn)四格
        String say = "hello";
        // 運算符左右必須有一個空格
        int flag = 0;
        // if語句與括號之間必須有一個空格, 左大括號前加空格不換行, 左大括號后換行
        if (flag == 0) {
            System.out.println(say);
            //右大括號前換行,右大括號有else, 不用換行
        } else {
            System.out.println("ok");
            //右大括號結(jié)束必須換行
        }
    }
}

補(bǔ)充

  • 單行字符數(shù)限制不超過120個,超出需要換行,換行時遵循如下原則

第二行相對第一行縮進(jìn)4個空格,從第三行開始,不再繼續(xù)縮進(jìn)
運算符與下文一起換行
方法調(diào)用的點符號與下文一起換行
方法調(diào)用中的多個參數(shù)需要換行時,在逗號后進(jìn)行
在括號前不要換行

  • 方法參數(shù)在定義和傳入時,多個參數(shù)逗號后邊必須加空格,如method(args1, args2, args3);
  • IDE的textfileencoding設(shè)置為UTF-8;IDE中文件的換行符使用Unix格式,不要使用Windows格式。
  • 單個方法的總行數(shù)不超過80行
  • 不同邏輯、不同語義、不同業(yè)務(wù)的代碼之間插入一個空行分隔開來以提升可讀性。

(四) OOP(面向?qū)ο蟪绦蛟O(shè)計)規(guī)約

  • 避免通過一個類的對象引用訪問此類的靜態(tài)變量或靜態(tài)方法,無謂增加編譯器解析成本,直接用類名來訪問即可。
  • 所有的覆寫方法,必須加@Override注解。
  • 相同參數(shù)類型,相同業(yè)務(wù)含義,才可以使用Java的可變參數(shù),避免使用Object
  • 不能使用過時的類或方法, 接口過時必須加@Deprecated注解,作為調(diào)用方來說,有義務(wù)去考證過時方法的新實現(xiàn)是什么
  • Object的equals方法容易拋空指針異常,應(yīng)使用常量或確定有值的對象來調(diào)用equals,如"test".equals(object)
    此處,阿里巴巴推薦使用java.util.Objects#equals(JDK7引入的工具類)
  • 所有的相同類型的包裝類對象之間值的比較,全部使用equals方法比較。
  • 所有的POJO類屬性必須使用包裝數(shù)據(jù)類型
  • 定義DO/DTO/VO等POJO類時,不要設(shè)定任何屬性默認(rèn)值
  • POJO類必須寫toString方法
  • 序列化類新增屬性時,請不要修改serialVersionUID字段,避免反序列失??;如果完全不兼容升級,避免反序列化混亂,那么請修改serialVersionUID值。
  • 構(gòu)造方法里面禁止加入任何業(yè)務(wù)邏輯,如果有初始化邏輯,請放在init方法中。
  • 禁止在POJO類中,同時存在對應(yīng)屬性xxx的isXxx()和getXxx()方法
  • 使用索引訪問用String的split方法得到的數(shù)組時,需做最后一個分隔符后有無內(nèi)容的檢查,否則會有拋IndexOutOfBoundsException的風(fēng)險。
  • 當(dāng)一個類有多個構(gòu)造方法,或者多個同名方法,這些方法應(yīng)該按順序放置在一起,便于閱讀,此條規(guī)則優(yōu)先于第16條規(guī)則
  • 類內(nèi)方法定義的順序依次是:公有方法或保護(hù)方法> 私有方法> getter/setter方法
    說明:公有方法是類的調(diào)用者和維護(hù)者最關(guān)心的方法,首屏展示最好;保護(hù)方法雖然只是子類關(guān)心,也可能是“模板設(shè)計模式”下的核心方法;而私有方法外部一般不需要特別關(guān)心,是一個黑盒實現(xiàn);因為承載的信息價值較低,所有Service和DAO的getter/setter方法放在類體最后
  • setter方法中,參數(shù)名稱與類成員變量名稱一致,this.成員名=參數(shù)名。在getter/setter方法中,不要增加業(yè)務(wù)邏輯,增加排查問題的難度。
  • 循環(huán)體內(nèi),字符串的連接方式,使用StringBuilder的append方法進(jìn)行擴(kuò)展,避免資源浪費
  • final可以聲明類、成員變量、方法、以及本地變量,下列情況使用final關(guān)鍵字

不允許被繼承的類,如:String類。
不允許修改引用的域?qū)ο蟆?br> 不允許被重寫的方法,如:POJO類的setter方法。
不允許運行過程中重新賦值的局部變量。
避免上下文重復(fù)使用一個變量,使用final描述可以強(qiáng)制重新定義一個變量,方便更好地進(jìn)行重構(gòu)。

  • 慎用Object的clone方法來拷貝對象,因為clone方法默認(rèn)的是淺拷貝
  • 類成員與方法訪問控制從嚴(yán)

如果不允許外部直接通過new來創(chuàng)建對象,那么構(gòu)造方法必須是private。
工具類不允許有public或default構(gòu)造方法
類非static成員變量并且與子類共享,必須是protected
類非static成員變量并且僅在本類使用,必須是private
類static成員變量如果僅在本類使用,必須是private
若是static成員變量,考慮是否為final
類成員方法只供類內(nèi)部調(diào)用,必須是private
類成員方法只對繼承類公開,那么限制為protected

:任何類、方法、參數(shù)、變量,嚴(yán)控訪問范圍。過于寬泛的訪問范圍,不利于模塊解耦。

(五) 集合處理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,001評論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,786評論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,986評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,204評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,964評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,354評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,410評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,554評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,106評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,918評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,093評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,648評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,342評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,755評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,009評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,839評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,107評論 2 375

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