1. 程式人生 > >Java編碼規範總結(參考騰訊編碼規範)

Java編碼規範總結(參考騰訊編碼規範)

一、java檔案組織

檔案組織規則:由於超過2000行的程式難以閱讀,應該儘量避免出現超過2000行的程式。一個Java原始檔都包含一個單一的公共類或介面。若私有類和介面與一個公共類相關聯,可以將它們和公共類放入同一個原始檔。公共類必須是這個檔案中的第一個類或介面。

檔案組織順序

2.包和引入語句:在多數Java原始檔中,第一個非註釋行是包語句。在它之後可以跟導包語句

3. 類或介面註釋:採用,在類、介面定義之前應當對其進行註釋,包括類、介面的描述、最新修改者、版本號、參考連結等;

注:JavaDoc文件註釋:描述Java的類、介面、構造方法、方法、以及欄位。每個文件註釋都會被置於註釋定界符/**...*/之中,一個註釋對應一個類、介面或成員。該註釋應位於宣告之前。文件註釋的第一行(/**)不需縮排,隨後的文件註釋每行都縮排1格(使星號縱向對齊)。

4. 類或介面的宣告

5. 類或介面的實現註釋:如果有關類或介面的資訊不適合作為“類或介面文件註釋”,可以在類或介面的實現註釋中給出;

6. 類的(靜態)變數:首先是類的公共變數,隨後是保護變數,再後是包一級別的變數(沒有訪問修飾符),最後是私有變數;

7. 例項變數:首先是公共級別的,隨後是保護級別的,再後是包一級別的(沒有訪問修飾符),最後是私有級別的;

8. 構造方法;

9. 普通方法:方法應該按功能分組,而不應該按作用域或訪問許可權進行分組。

二、程式碼風格

      1.縮排:程式塊要採用縮排風格編寫,縮排只使用TAB鍵,不能使用空格鍵(編輯器中請將TAB設定為4格);方法體的開始、類的定義、以及

iffordowhileswitchcase語句中的程式碼都要採用縮排方式;

      2.對齊:程式塊的分界符左大括號"{" 和右大括號"}"都另起一行,應各獨佔一行並且位於同一列,同時與引用它們的語句左對齊;對齊只使用TAB鍵,不使用空格鍵;不允許把多個短語句寫在一行中,即一行只寫一條語句;iffordowhilecaseswitchdefault等語句自佔一行。

      3.換行:一行的長度超過80個字元需要換行,換行規則如下:

在一個逗號後面斷開;

在一個操作符前面斷開;

長表示式要在低優先順序操作符處劃分新行;

新行縮排2個TAB。

4.間隔:類、方法及相對獨立的程式塊之間、變數說明之後必須加空行;關鍵字之後要留空格,

ifforwhile  等關鍵字之後應留一個空格再跟左括號"(", 以突出關鍵字;方法名與其左括號"("之間不要留空格, 以與關鍵字區別;二元操作符如   " ="、" +="  " >="、" <="、" +"、" *"、" %"、" &&"、" ||"、" <<" ," ^" 等的前後應當加空格;一元操作符如" !"、" ~"、" ++"、" --"等前後不加空格;xiang"[ ]"、" ." 這類操作符前後不加空格;for語句中的表示式應該被空格分開;強制轉型後應該跟一個空格。

三、註釋

1.原則:對已經不推薦使用的類和方法需要註明@Deprecated,並說明替代的類或者方法;對於針對集合、開關的方法,要在方法註釋中表明是否多執行緒安全。

2.欄位註釋: 採用JavaDoc文件註釋,定義為public的欄位必需給出註釋,在類的(靜態)變數、例項變數定義之前當對其進行註釋,給出該欄位的描述等:

3.方法註釋:採用JavaDoc文件註釋,在方法定義之前當對其進行註釋,包括方法的描述、輸入、輸出及返回值說明、丟擲異常說明、參考連結等:

4.單行註釋格式//

6.多行註釋格式/*……*/

三、命名規則

1.基本規則:使用可以準確說明變數、欄位、類、介面、包等完整的英文描述符;採用大小寫混合,提高名字的可讀性;採用該領域的術語;儘量少用縮寫,但如果一定要使用,當使用公共縮寫和習慣縮寫等;避免使用相似或者僅在大小寫上有區別的名字。

2.包命名:包名一律小寫, 少用縮寫和長名;採用以下規則:

                                  [基本包].[專案名].[模組名].[子模組名]...

不得將類直接定義在基本包下,所有專案中的類、介面等都應當定義在各自的專案和模組包中。

3.類或介面命名:類或介面名是個一名詞,採用大小寫混合的方式,每個單詞的首字母大寫。儘量使你的類名簡潔而富於描述。使用完整單詞,避免用縮寫詞(除非該縮寫詞被更廣泛使用,像URL,HTML)。

4.變數命名: 採用大小寫混合的方式,第一個單詞的首字母小寫,其後單詞的首字母大寫;變數名不應以下劃線或美元符號開頭;儘量避免單個字元的變數名,除非是一次性的臨時變數。臨時變數通常被取名為i,j,k,m和n,它們一般用於整型;c,d,e,它們一般用於字元型;不採用匈牙利命名法則,對不易清楚識別出該變數型別的變數應使用型別名或型別名縮寫作其後綴;元件或部件變數使用其型別名或型別名縮寫作其後綴;集合型別變數,例如陣列和向量,應採用複數命名或使用表示該集合的名詞做字尾。

5.常量命名:全部採用大寫,單詞間用下劃線隔開。

6.方法命名:方法名是一個動詞,採用大小寫混合的方式,第一個單詞的首字母小寫,其後單詞的首字母大寫;取值類可使用get字首,設值類可使用set字首,判斷類可使用is(has)字首。

四、宣告

1.類或介面的聲名:類、介面定義語法規範如下

[可見性][('abstract'|'final')] [Class|Interface] class_name

[('extends'|'implements')][父類或介面名]{

//方法體

}

2.方法宣告:良好的程式設計應該儘可能減小類與類之間耦合,所遵循的經驗法則是:儘量限制成員函式的可見性。如果成員函式沒必要公有 (public),就定義為保護 (protected);沒必要保護 (protected),就定義為私有 (private);方法定義語法規範:

[可見性]['abstract'] [‘static’] ['final'] ['synchronized'][返回值型別] method_name(引數列表)[('throws')][異常列表]{

//方法體

}

宣告順序:構造方法、靜態公共方法、靜態私有方法、公共方法、友元方法、受保護方法、私有方法、main方法;方法引數建議順序:(被操作者,操作內容,操作標誌,其他)。

3.變數宣告:一行一個宣告;宣告區域性變數的同時初始化(在變數的初始值依賴於某些先前發生的計算的特殊情況下可以不用同時初始化);只在程式碼塊的開始處宣告變數,(一個塊是指任何被包含在大括號"{"和"}"中間的程式碼)不要在首次用到該變數時才宣告;避免宣告的區域性變數覆蓋上一級宣告的變數,即不要在內部程式碼塊中宣告相同的變數名;公共和保護的可見性應當儘量避免,所有的欄位都建議置為私有,由獲取和設定成員函式(Getter、Setter)訪問;定義一個變數或者常量的時候,不要包含包名(類似java.security.MessageDigest digest = null),除非是兩個包有相同的類名;陣列宣告時應當將"[]"跟在型別後,而不是欄位名後;宣告順序:常量、類變數、例項變數、公有欄位、受保護欄位、友元欄位、私有欄位。

五、異常

      1.捕捉異常的目的是為了處理它

      2. 多個異常應分別捕捉並處理,避免使用一個單一的catch來處理。

六、習慣

1. if、for、do、while等語句的執行語句部分無論多少都要加括號"{}"

2. 每當一個case順著往下執行時(因為沒有break語句),通常應在break語句的位置添加註釋;

3. 儘量避免在迴圈中構造和釋放物件

4. 在使用區域性變數的過程,按就近原則處理。不允許定義一個區域性變數,然後在很遠的地方才使用;

5.相同的功能不允許複製成N份程式碼;

6. 在處理 String 的時候要儘量使用 StringBuffer 類。