《java 編程規範》個人總結

最近看了點《java編程規範》,總結了點個人覺得很必要的規範內容。


一. 排版規範

1.避免長的布爾表達式,應換成多個更容易理解的表達式。
bool isFinished = (elementNo < 0) || (elementNo > maxElement);
bool isRepeatedEntry = elementNo == lastElement;
if (isFinished || isRepeatedEntry) {

}
// 避免
if ((elementNo < 0) || (elementNo > maxElement)|| elementNo ==
lastElement) {

}

2.不要在條件語句中執行方法,以提高可讀性(java裏似乎經常這樣做)
InputStream stream = File.open(fileName, "w");
if (stream != null) {

}
//避免
if (File.open(fileName, "w") != null)) {

}

3 代碼縮進,應該使用4 個空格爲一個單位進行縮進(如果用eclipse的話,直接選定需要縮進內容,按ctrl+shitf+F,注意先切換掉輸入法)
public String invoke() throws Exception {
....String profileKey = "invoke: ";
try {
....UtilTimerStack.push(profileKey);
if (executed) {
....test = true;
}
catch{
}
}

4. 條件語句的主要形式,即使單條語句,也要使用括號括起來。(我似乎做到了)
if (condition) {
statements;
}


if (condition) {
statements;
} else {
statements;
}


if (condition) {
statements;
} else if (condition) {
statements;
} else {
statements;
}

5.空循環體也要使用完整的{}塊
for (initialization; condition; update) {
;
}

6. try-catch 使用格式(個人覺得第二種挺重要的)
try {
statements;
}
catch (Exception exception) {
statements;
}


try {
statements;
}
catch (Exception exception) {
statements;
}
finally {
statements;
}

7. 空格的使用 (這個值得注意)
1. 運算符兩邊應該各有一個空格。
2. Java 保留字後面應跟隨一個空格。
3. 逗號後面應跟隨一個空格。
4. 冒號兩個應各有一個空格。
5. 分號後面應跟隨一個空格。

a = (b + c) * d; // NOT: a=(b+c)*d
while (true) { // NOT: while(true){ ...
doSomething(a, b, c, d); // NOT: doSomething(a,b,c,d);
case 100 : // NOT: case 100:
for (i = 0; i < 10; i++) { // NOT: for(i=0;i<10;i++){ ...

8. 空行的使用(我的理解是,儘量多用...)
1. 文件頭部註釋、package 語句和import 語句之間。
2. class 之間
3. 方法之間
4. 方法中,變量的申明和具體代碼之間。
5. 邏輯上相關的語句段之間
6. 塊註釋和行註釋的前面

9. 邏輯上緊密相關的代碼塊應該用一個空行分開。
// Create a new identity matrix
Matrix4x4 matrix = new Matrix4x4();

// Precompute angles for efficiency
double cosAngle = Math.cos(angle);
double sinAngle = Math.sin(angle);

// Specify matrix as a rotation transformation
matrix.setElement(1, 1, cosAngle);
matrix.setElement(1, 2, sinAngle);
matrix.setElement(2, 1, -sinAngle);
matrix.setElement(2, 2, cosAngle);
// Apply rotation

transformation.multiply(matrix);

10  爲了保證可讀性,變量名應該左對齊。
TextFile file;
int nPoints;
double x, y;
//避免
TextFile file;
int nPoints;
double x, y;

11  當對if 語句中的條件進行折行時,應該使折行的條件語句相對主功能
語句再行縮進4 個空格,以突出主要功能語句。(好像沒注意過)

//使用這種縮進,突出主要功能語句。
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}

//避免使用這種縮進,主功能語句不突出。
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}

12 三元條件運算符
可以使用如下三種表達方式,條件要用括號括起來。
alpha = (aLongBooleanExpression) ? beta : gamma;
alpha = (aLongBooleanExpression) ? beta
: gamma;
alpha = (aLongBooleanExpression)
? beta
: gamma


二.  命名規範

先說兩個術語:
Pascal case :所有單詞第一個字母大寫,其它字母小寫。
 例:Person, OrderDetail, OilTank。
Camel  case :除了第一個單詞,所有單詞第一個字母大寫,其他字
 母小寫。
 例:oilLevel, customerName


1. 包名應該用小寫字母,不要出現下劃線等符號,名詞用有意義的縮寫或
者英文單詞。
//推薦
com.esse.business
java.lang.util
//避免
com.Esse-tech.buSiness

2 所有類命名使用Pascal(單詞首字母都大寫)表示方式,使用名詞組合。
UserManager, ClassLoader, HttpHeaderResult

3 接口命名使用字母“I”加上Pascal 形式的表示方式。
IQuery, IDataAccess,IReportBuilder

4. 使用名詞組合或形容詞去命名一個接口,接口聲明瞭一個對象能提供的
服務,也描述了一個對象的能力。一般以“able”和“ible”作爲後綴,
代表了一種能力。

public interface Runnable{
public void run();
}
public interface Accessible{
public Context getContext();
}

5 變量名和參數名使用Camel 表示方式。
userName, objectFactory, entrys, list

6 對於常量名,使用大寫字母,並使用下劃線做間隔。
MAX_TIMES, DEFAULT_NAME
程序中應該使用常量代替“25”,“100”等實際的數字,如:
//推薦
if(times == MAX_TIMES){

}
//避免
if(times == 25){

}
這樣做的好處是,當因需要修改實際的數字時,比如修改25 爲30,只需要
修改一處。

7 方法名應該使用動詞開頭,使用Camel 表示方式,一般由動詞+名詞組
成。

getName, initialize, addParameter, deleteUser

8 縮寫字母也應該保持首字母大寫
exportHtmlSource(); // 避免: exportHTMLSource();
openDvdPlayer(); // 避免: openDVDPlayer();

9 變量的名字應該和類型名稱一致
void setTopic(Topic topic) // 避免: void setTopic(Topic value)
// 避免: void setTopic(Topic aTopic)
// 避免: void setTopic(Topic t)
void connect(Database database)
// 避免: void connect(Database db)
// 避免: void connect(Database oracleDB)

當同時定義多個屬於同一個類的變量時,把類型作爲實例的後綴,如:
Point startPoint;
Point centerPoint;
這樣做是爲了從實例名就可以推斷它的類型名稱

10 根據變量的作用範圍,作用範圍大的應該使用長名稱,作用範圍大,表
明變量的生命週期比較長,爲了有助於理解,應儘量用長名稱以表達變量的
真實意圖。反之,對於作用範圍小,可以使用一些簡化的名稱,比如i,j,
k 等,提高編程效率。
for(int i =0;i < times; i++){

}

11 使用get/set 對類屬性進行訪問,這是Java 社區的核心編碼規範。(吾等謹記)

12 使用is 前綴表示一個布爾變量和方法。
isUsed, isEmpty,isVisible,isFinished
有時也可以使用has,can,should:
boolean hasLicense();
boolean canEvaluate();
boolean shouldAbort = false;

13 對於對象集合, 變量名稱應使用複數。
Collection<Point> points;
int[] values;

14 對於抽象類,應該使用Abstract 前綴。 (貌似很多代碼不是這樣的麼....)
AbstractReportBuilder,AbstractBeanFactory

15 對於表示編號的變量,應加No 後綴。(好像我都用的idx..)
tableNo, userNo,employeeNo

16 避免使用否定布爾變量(不然要想半天是什麼意思了...)
bool isError; // 避免: isNoError
bool isFound; // 避免: isNotFound

17 對於單例類(Singleton),應該使用getInstance 方法得到單例。
class UnitManager {
private final static UnitManager instance = new UnitManager();
private UnitManager() {
...
}
public static UnitManager getInstance(){
return instance_;
}
}

18 對於工廠類,進行創建對象的方法,應該使用new 前綴
class PointFactory {
public Point newPoint(...) {
...
}
}

三. 註釋規範

1. 使用行末註釋對深層嵌套代碼進行註釋
for(i…){
for(j…){
while(…){
if(…){
switch(…){

}// end switch
}//end if
}//end while
}//end for i
}//end for j



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章