淺談Java中的命名規范


現代軟件架構的復雜性需要協同開發完成,如何高效地協同呢?

答案是:制定一整套統一的規范。

無規矩不成方圓,無規范難以協同,比如,制訂交通法規表面上是要限制行車權,實際上是保障公眾的人身安全,試想如果沒有限速,沒有紅綠燈,誰還敢上路行駛?

本文將從Java代碼的命名規范這一維度,來探討一下,如何寫出健壯的、可讀性強的代碼,提高項目的可維護性。最重要的是提高我們的編程幸福感。

1.包名統一使用小寫,點分隔符之間有且僅有一個自然語義的英語單詞。包名統一使用單數形式,但是類名如果有復數含義,類名可以使用復數形式。

正例:應用工具包名為com.java.util、類名為StringUtils

2.類名、接口名使用UpperCamelCase風格,必須遵從駝峰形式,但以下情形例外:DO/BO/DTO/VO/AO/PO/UID等。

正例:UserLoginCheckService/UserDO

反例:userlogincheckservice/UserDo

3.方法名、參數名、成員變量、局部變量都統一使用lowerCamelCase風格,必須遵從駝峰形式。

正例:userServiceImpl

反例:userserviceimpl

4.常量命名全部大寫,單詞間用下划線隔開,力求語義表達完整清楚,不要嫌名字長。

正例:MAX_BOOK_COUNT/CACHE_EXPIRED_TIME

反例:MAX_COUNT/EXPIRED_TIME

5.為了達到代碼自解釋的目標,任何自定義編程元素在命名時,使用盡量完整的單詞組合來表達其意,即要做到“見名知意”。

正例:在 JDK 中,表達原子更新的類名為:AtomicReferenceFieldUpdater

反例:String a = "李四"; // 天啦嚕,鬼知道你這個a是啥意思啊

6.定義數組時,類型與中括號緊挨相連

正例:

int[] array = new int[10];

int array[] = new int[10]; // 不建議這樣寫
7.抽象類命名使用 Abstract 或 Base 開頭;異常類命名使用 Exception 結尾;測試類命名以它要測試的類的名稱開始,以 Test 結尾。

正例:AbstractService/CommonException/DemoTest

8.杜絕完全不規范的縮寫,避免望文不知義。

反例:AbstractClass“縮寫”命名成 AbsClass;condition“縮寫” 命名成 condi,此類隨意縮寫嚴重降低了代碼的可閱讀性。

9.如果模塊、 接口、類、方法使用了設計模式,在命名時需體現出具體模式

說明:將設計模式體現在名字中,有利於閱讀者快速理解架構設計理念。

正例:public class OrderFactory;
public class LoginProxy;
public class ResourceObserver;

10.對於 Service 和 DAO 類,基於 SOA 的理念,暴露出來的服務一定是接口,內部的實現類用Impl 的后綴與接口區別。

正例:CacheServiceImpl實現CacheService接口

11.如果是形容能力的接口名稱,取對應的形容詞為接口名(通常是–able 的形容詞)。

正例:JDK中的Comparable接口

12.在long或者Long賦值時,數值后使用大寫的 L,不能是小寫的 l,小寫容易跟數字 1 混淆,造成誤解。

說明:Long a = 2l;寫的是數字的 21,還是 Long 型的 2 ??

13.不允許任何魔法值(即未經預先定義的常量)直接出現在代碼中

正例:

public static final ORDER_REDIS_KEY_PREFIX = "orderId_";
String orderRedisKey = ORDER_REDIS_KEY_PREFIX + orderId;

反例:

String redisKey = "orderId_" + orderId;
14.枚舉類名帶上Enum后綴,枚舉成員名稱需要全大寫,單詞間用下划線隔開。

正例:枚舉名字為ProcessStatusEnum的成員名稱:SUCCESS / UNKNOWN_REASON


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM