命名風格 取消不良命名習慣
良好的命名風格在遵守Java命名語法之上
對命名提出了更高的要求
良好的命名風格必須遵守以下的命名規則
) 類或接口必須以大寫字母打頭
) 方法
屬性
成員變量
局部變量以小寫字母打頭
且不以
_
或
$
打頭
) 常量的所有字母都大寫
) 異常類以Exception結尾
良好命名對應
Naming Style
下的
Naming Conventions
設置項
建立和國際接軌的包名
包名應該用頂級域名打頭
如com
org
edu等
或者用國家代碼如cn
ru等
一般公司和組織都對包名前兩級都有嚴格的規則
如IBM公司的類以com
ibm打頭
apache以org
apache打頭
第三級才是具體的項目或產品名稱
這樣的包命名就象三維網的URL命名一樣已經成為了一種國際通用的准則
對此沒有作出嚴格規定的公司
開發負責人應該推動建立起符合這一命名規則的規范
該審查項
默認情況下沒有激活
可以通過
Naming Style
下的
Package Name
的設置項激活
避免用過於簡單的變量名
除了循環體中的臨時變量
及一些沒有特殊意義的常見數據類型
應該盡量避免使用一個字符作為變量
那些無特殊意義且常見的數據類型
所選取的單字符變量名必須按表
進行命名
表
變量本身無意義的常見數據類型允許的單字符變量
此外
為了減少潛在的沖突
避免不必要的混淆
不允許以大寫域名或國家代碼作變量名
代碼清單
取有意義的變量名
void method(double d)
{
int i;
Exception e;
char s;//應該改為c
Object f;//應該改為o
String k;//應該改為s
Object UK;//和英國國家代碼相同
應改為其他的名字
如ukObj
Object COM;//和域名相同
應改為其他的名字
如obj_
}
該審查項
在默認情況下沒有激活
可以通過
Naming Style
下的
Use Conventional Variable Names
的設置項激活
潛在錯誤審查 聚焦switch
由於switch流程控制語句語法的特殊性
編寫程序時需要特別注意
否則將會埋下禍根
JBuilder從以下
個方面對switch進行審查
) 有無對前面沒有break語句的case從句作標識
根據Sun編碼慣例
程序入口點從一個case進入
直接到達下一個case代碼段
即前一個case沒有對應的break語句時
在跨過的地方必須給出一個顯示的注釋
表示是特定流程控制的要求
而非無意遺漏
來看下面的代碼
代碼清單
沒有break的case從句
switch (c) {
case
+
:
break;
case
:
case
n
:
case
: case
\t
:
break;
}
假設在代碼清單
的第
行之前
是因為疏忽而遺漏了一個break語句
第
行之前是邏輯需要而故意不加break語句
則將代碼更改為
代碼清單
更正的switch代碼
switch (c) {
case
+
:
break;
case
:
break;
case
n
:
//繼續運行到下面
case
: case
\t
:
break;
}
該審查內容對應於
Possible Errors
下的
Break Statement is Missing before Case clause
設置項
) 在switch中出現非case的標簽
在Java語句中有兩個標簽
即case分支標簽
另一個則是語句標簽
如果case分支標簽語句誤刪或遺漏了case關鍵字
則case分支標簽將變成語句標簽
而編譯器無法識別這個錯誤
代碼清單
case分支中缺少case而使標簽發生質變
public class CaseLabel
{
/**點*/
public static final int POINT =
;
/**線*/
public static final int LINE =
;
/**多邊形*/
public static final int POLYGON =
;
public String getFigureType (int kind)
{
String tempName = null;
switch (kind)
{
case POINT:
LINE://該語句缺少case
編譯器將其作為語句標簽處理
並不會發生語法錯誤
//但該方法傳入常量LINE時
將轉到default分支中
而非到達這晨
故
//應該將該行語句更改為case LINE:
tempName =
POINT and LINE
;
break;
case POLYGON:
tempName =
POLYGON
;
break;
default:
tempName =
UNDEFINE
;
}
return tempName;
}
}
該審查內容對應於
Possible Errors
下的
Non
Case Label in Switch statement
設置項
) 有錯誤嫌疑的break和continue
break和continue用於switch和循環中的跳轉控制
break用於提前結束循環以及從switch中退出
break的這種
多態性
使得在循環體中內嵌switch語句時
常會帶來一些隱患
即開發者本希望退出外層循環
結果卻只退出內層的switch語句而已
JBuilder
對這項內容的審查包括以下方面
switch內嵌於循環體中
且case從句中包含了不位於分支塊最後位置的break語句
switch內嵌於循環體中
且case從句既使用了break
又使用了continue
但兩者的效果卻是一樣的
break或continue語句中使用了不必要的語句標簽
請看下面的代碼
代碼清單
有錯誤嫌疑的break和continue
void scan(char[] arr)
{
loop:
for (int i =
; i < arr
length; i++)
{
switch (arr[i])
{
case
:case
:case
:case
:case
:
//
~
的數字
case
:case
:case
:case
:case
:
{
if (processDigit(arr[i]))
{
continue loop; //loop語句標簽沒有必要
}
else
{
break; // 該break不會結束for循環
應該使用break loop才可結束循環
}
}
case
:case
\t
:
{
processWhitespace(arr[i]);
continue; // 應該使用break而非continue
}
default:
processLetter(arr[i]);
break;
}
}
該審查內容對應於
Possible Errors
下的
Suspicious Break/Continue
設置項
避免對浮點值進行等值邏輯判斷
浮點數都是一定精度的數據
由於內部表示的誤差
往往字面上相同的兩個浮點數
其內部表示也不完全相同
故此應避免對浮點值數進行等值邏輯判斷
而應采用邏輯比較判斷
代碼清單
語句中包含浮點等值判斷
void calc(double limit)
{
if (limit ==
)//應改為通過和較小值比較來判斷
如if(Math
abs(limit) <
)
{
System
out
println(
the float
point number is exactly
);
}
}
該審查內容默認未激活可以通過
Possible Errors
下的
Suspicious Break/Continue
設置項來激活審查
添加()清晰化復雜的表達式
寫復雜的表達式時不應過度依賴運算操作符的計算優先順序
而應養成使用
()
的好習慣
當一個邏輯表達式由多個邏輯運算組成時
應該用
()
劃分不同的部分
代碼清單
用括號清晰化表達式
boolean a
b
c;
if (a || b && c) //應該替換成if ((a || b) && c)
{
}
該審查內容默認未激活可以通過
Possible Errors
下的
Mixing Logical Operators Without Parentheses
設置項來激活審查
字符串比較
Java初學者一個常犯的錯誤是使用
==
或
!=
對字符串進行等值邏輯判斷
使用
==
將判斷兩者否是指向相同的對象引用
而非判斷兩者是否具有值
應該使用equals()替代
代碼清單
用equals()替換
==
public boolean equals(String s
String s
)
{
return s
== s
; //應改為return s
equals(s
);
}
該審查內容對應於
Possible Errors
下的
Use
equals
Instead of
= =
設置項
規避各種畫蛇添足 將布爾變量和布爾值比較
沒有必要將布
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26776.html