類命名規范:
類名使用 UpperCamelCase 風格(首字母都大寫),必須遵從駝峰形式。 例如: MessageUtil
抽象類命名使用 Abstract 或 Base 開頭 ; 異常類命名使用 Exception 結尾 ; 測試類命名以它要測試的類的名稱開始,以 Test 結尾。
對於 Service 和 DAO 類,基於 SOA 的理念,暴露出來的服務一定是接口,內部的實現類用 Impl 的后綴與接口區別。
推薦實體類沒有后綴名。
POJO 類中布爾類型的變量,都不要加 is ,否則部分框架解析會引起序列化錯誤。
其他:
方法名、參數名、成員變量、局部變量都統一使用 lowerCamelCase 風格(第一個單詞首字母小寫,其他單詞首字母大寫),必須遵從駝峰形式。 例如: myFirstName
常量命名全部大寫,單詞間用下划線隔開,力求語義表達完整清楚,不要嫌名字長。 例如:MAX_NAME_LENGTH
包名的書寫規范 (Package)
推薦使用公司或機構的頂級域名為包名的前綴,目的是保證各公司/機構內所使用的包名的唯一性
包名統一使用小寫,點分隔符之間有且僅有一個自然語義的英語單詞,包名統一使用單數形式。如果類名有復數含義,類名可以使用復數形式。
實際應用中:
各層命名規約:
A) Service / DAO 層方法命名規約
1 ) 獲取單個對象的方法用 get 做前綴。
2 ) 獲取多個對象的方法用 list 做前綴。
3 ) 獲取統計值的方法用 count 做前綴。
4 ) 插入的方法用 save( 推薦 ) 或 insert 做前綴。
5 ) 刪除的方法用 remove( 推薦 ) 或 delete 做前綴。
6 ) 修改的方法用 update 做前綴。
B) 領域模型命名規約
1 ) 數據對象: xxxDO , xxx 即為數據表名。
2 ) 數據傳輸對象: xxxDTO , xxx 為業務領域相關的名稱。
3 ) 展示對象: xxxVO , xxx 一般為網頁名稱。
4 ) POJO 是 DO / DTO / BO / VO 的統稱,禁止命名成 xxxPOJO 。
推薦:
如果使用到了設計模式,建議在類名中體現出具體模式。
接口類中的方法和屬性不要加任何修飾符號 (public 也不要加 ) ,保持代碼的簡潔性,並加上有效的 Javadoc 注釋。盡量不要在接口里定義變量,如果一定要定義變量,肯定是與接口方法相關,並且是整個應用的基礎常量。
注釋的書寫規范 (Javadoc)
Java除了可以采用我們常見的注釋方式(//、/* */)之外,Java語言規范還定義了一種特殊的注釋,也就是我們所說的Javadoc注釋,以/**開頭,而以*/結束, Javadoc 注釋可以被自動轉為在線文檔,省去了單獨編寫程序文檔的麻煩。 推薦使用。
Javadoc注釋主要涉及范圍:類、屬性、方法。
import java.net.InetAddress; import java.util.Arrays; /** * 該類的整體性描述。 * * @author 作者 * @version 1.0, 05/22/07 * @since 1.0 */ public class ChannelBinding { /** * 對該變量的備注信息 */ private InetAddress initiator; /** * 對該變量的備注信息 */ private InetAddress acceptor; /** * 對該變量的備注信息 */ private byte[] appData; /** * 對該類的構造函數的備注信息。 * * @param initAddr 對參數的備注。 * @param acceptAddr對參數的備注。 * @param appData對參數的備注。 */ public ChannelBinding(InetAddress initAddr, InetAddress acceptAddr, byte[] appData) { initiator = initAddr; acceptor = acceptAddr; if (appData != null) { this.appData = new byte[appData.length]; java.lang.System.arraycopy(appData, 0, this.appData, 0, appData.length); } } /** * 對該類的具體一函數的備注信息 * * @param obj 參數的備注信息 * @return 返回值的備注信息 */ public boolean equals(Object obj) { if (this == obj) return true; if (! (obj instanceof ChannelBinding)) return false; ChannelBinding cb = (ChannelBinding) obj; return Arrays.equals(appData, cb.appData); } }