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