Java代碼開發規范
格式規范:
1、TAB空格的數量。編輯器上的TAB空格數量統一取值為4
2、換行, 每行120字符
3、if語句的嵌套層數3層以內
4、匿名內部類20行以內 ,太長的匿名內部類影響代碼可讀性,建議重構為命名的
(普通)內部類。
5、文件長度2000行以內
6、方法長度150行以內
7、邏輯上相關序代碼與其前后之程序代碼間應以空白行加以分隔;在注釋段與程序
段、以及不同程序段插入空行。提高可讀性
8、方法(構造器)參數在5個以內 ,太多的方法(構造器)參數影響代碼可讀性。
考慮用值對象代替這些參數或重新設計。
9、CC 度量值不大于10
解釋:CC(CyclomaticComplexity)圈復雜度指一個方法的獨立路徑的數量,可以
用一個方法內if,while,do,for,catch,switch,case,?:語句與&&,||操作符的
總個數來度量。
10、NPath度量值不大于200
解釋:NPath度量值表示一個方法內可能的執行路徑的條數。
11、布爾表達式中的布爾運算符(&&,||)的個數不超過3個
命名規范:
(開發人員如果遇到以下未列舉的類型,請書面通知相關管理人員,由管理人員集中更新列
表內容,不得擅自啟用未經確定的新變量前綴)
包名 必須全部用小寫。
命名方式:業務領域名.子系統名.層名 如com.iteach.dao.weibo
類名 以英文單詞取名,首字母必須大寫,多個英文單詞以大寫字母間隔,避免使用單詞的縮寫,除非它的縮寫已經廣為人知,如HTTP。類名中不允許'_'、 '-'等符號。[A4]
屬性 在類定義的開始,按照public,protected,package,private順序放置。定義local變量盡量在那段代碼的開始處,如方法的開始處。
如果是if,for,while段,盡量在左大括號"{"的下一行處定義要使用的local變量。
盡量用相同含義英文單詞表示,不允許'_'、 '-'等符號,如:custName。第一個字母小寫,中間單詞的第一個字母大寫。不要用_或&等符號作為第一個字母。 單字符的變量名一般只用于生命期非常短暫的變量。如:i,j,k,m,n一般用于int。如果變量是集合,則變量名應用復數,即以小寫s結尾 。例如:
序號 |
變量名稱 |
注 釋 |
1 |
strFileName |
"文件名"字符串類型 |
2 |
intFileCount |
"文件總數"整型 |
3 |
strFames |
多個"文件名"的集合 |
4 |
gMemory |
全局變量 |
常量名 均全部大寫,單詞間以'_'隔開。例如:
序號 |
常量名稱 |
注 釋 |
1 |
MAX_NUM |
最大數 |
2 |
public static final String FUNCTION_LIST = "function_list"; |
… |
方法 命名采用"動作+屬性" 的方法。并且,動作以小寫字母開始,屬性以大寫字母開始。常用的動作有:is、get、set、add、 update、del等。
例如:getName、setName、isSysManager、saveXXX、mdfXXX、delXXX等。
規則名稱 |
規則 |
說明 |
新增數據 |
addXXX |
|
修改數據 |
updateXXX |
|
刪除數據 |
deleteXXX |
|
查詢數據 |
findXXX
getXXX |
findUserByName() 獲取單個
getUserByName() 獲取所有 |
備注:
遇到縮寫如XML時,僅首字母大寫,即loadXmlDocument()而不是
loadXMLDocument()
為了基于接口編程,不采用首字母為I或加上IF后綴的命名方式,如
IBookDao,BookDaoIF。
頁面部件名建議命名為:btnOK、lblName或okBtn、nameLbl
其中btn、lbl縮寫代表按鈕(Button)、標簽(Label)。
注釋規范:
(在類、方法開始之前需要添加中文注釋,類和方法的注釋采用Java自動生成的注釋格式。)
1、類注釋:
/**
* 類功能說明
* 類創建者 創建日期
*/
2、函數注釋
/**
* 函數功能說明
* 創建者名字 創建日期
* 修改者名字 修改日期
* 修改內容
* @param 參數名稱 參數類型 參數說明
* @return 返回值類型 返回值說明
*/
3、程序段注釋
如果做過修改需加上修改者和日期 //修改者 修改日期 說明
或者
/**
*修改者 修改日期
*說明
*/
4、變量或屬性注釋
//說明
5、失效代碼注釋
由/*...*/界定,標準的C-Style的注釋,專用于注釋已失效的代碼
注:沒有意義的注釋語句刪掉,不留空的注釋語句
備注建議的注釋:(非下劃線標注的規范建議使用,不強制)
循環語句和判斷語句前必須注釋。
特殊變量聲明時需要注釋。
如果方法允許Null作為參數,或者允許返回值為Null,必須在JavaDoc中說明。
注釋中的第一個句子要以(英文)句號、問號或者感嘆號結束。Javadoc生成
工具會將注釋中的第一個句子放在方法匯總表和索引中。
為了在JavaDoc和IDE中能快速鏈接跳轉到相關聯的類與方法,盡量多的使用
@see xxx.MyClass,@see xx.MyClass#find(String)。
如果注釋中有超過一個段落,用<p>分隔。
示例代碼以<pre></pre>包裹。
標識(java keyword, class/method/field/argument名,Constants) 以<code></code>
包裹。
標識在第一次出現時以{@linkxxx.Myclass}注解以便JavaDoc與IDE中可以鏈
接。
如果該注釋是廢話,連同標簽刪掉它,而不是自動生成一堆空的標簽,如空的
@param name,空的@return。
推薦的注釋內容:
對于API函數如果存在契約,必須寫明它的前置條件(precondition),后置條件
(postcondition),及不變式(invariant)。
對于調用復雜的API盡量提供代碼示例。
對于已知的Bug需要聲明。
在本函數中拋出的unchecked exception盡量用@throws說明。
代碼質量不好但能正常運行,或者還沒有實現的代碼用//TODO: 或 //XXX:
聲明存在錯誤隱患的代碼用//FIXME:聲明
異常處理:
重新拋出的異常必須保留原來的異常,即throw new NewException("message", e);
而不能寫成throw new NewException("message")。
在所有異常被捕獲且沒有重新拋出的地方必須寫日志。
如果屬于正常異常的空異常處理塊必須注釋說明原因,否則不允許空的catch塊。
框架盡量捕獲低級異常并封裝成高級異常重新拋出,隱藏低級異常的細節,方便
系統能夠更好的跟蹤運行情況。
如果一個層要拋出多個異常,那么所有自定義異常必須統一繼承一個父類異常。
這樣上層可以通過父類異常捕獲。
編寫細節建議規范:
1、 為了提高可讀性,一般情況下,字符串的連接使用"+",而不是StringBuffer
中的方法。在考慮速度性能的時候才考使用StringBuffer。
2、(不強制)沒有特殊原因,不要定義synchronized 的方法。而是在方法內實
際需要同步的代碼段加入synchronized限定,如:
public void sharedMethod() {
String display = null;
synchronized( this ) {
display = mySharedObject.getHelloWorld();
}
System.out.println( display );
}
3、 捕捉例外的標準書寫規則如下:
try{
// some stuff
} catch ( FileNotFoundException fnfe ) {
// some stuff
} finally {
// some stuff
}
例外的變量名統一規定為例外類名中大寫字母的組合。
4、 (不強制)對于一個方法或實例化類調用是否成功,不采用返回boolean值來判
斷,而采用捕捉例外的方法,如:
Order m_order = new Order();
try {
m_order.init();
} catch ( OrderNotFoundException onfe ) {
// some stuff
}
http://cobaya.cn/