今天再次想啟動Java代碼靜態檢測工具的利用問題,主要再次嘗試用了PMD,發現不少代碼編碼規范問題和好的代碼建議,並學到不少自己之前沒有注意到的Java方便的基礎知識,感覺很不錯,把相關明白的好的規則回憶總結下,再以后編碼過程中要把隨時利用代碼靜態檢查工具,用好代碼靜態檢查工具養成習慣。今天用到的PMD檢查規則如下:
If表達式必須使用{},無論有多少語句
While循環必須使用{},無論有多少語句
IfElse表達式必須使用{}
For循環語句必須使用{}
如果方法返回boolean,那么注意避免不必要的if..then..else語句
避免if語句嵌套過深(會導致代碼可讀性降低)
解決辦法:建議if嵌套不要超過2層。使用工具方法封裝更多的if語句或者把嵌套的if表達式放到同一個層次中。
忽略大小寫進行字符串比較時,使用String.equalsIgnoreCase,不要使用String.toLowerCase.前者有更好的性能而且還可以避免后者帶來的本地化問題
避免方法級的同步
塊級別的同步可以確保內含真正需要同步的代碼。
使用集合類的isEmpty方法
java.util.Collection類的isEmpty方法提供判斷一個集合類是否包含元素。不要是使用size()和0比較來重復類庫已經提供的方法。 這條原則告訴我們一個普遍的原則:復用。盡量復用,充分利用已有的資源,不要重復自己(DRY)。比如apache提供了大量工具類供我們使用,我們沒有必要再自己寫了。
沒有使用的代碼
就一個原則:沒有使用的就去掉,保持代碼的干凈、整潔。
沒有使用的代碼包括:
Ø 沒有使用的私有成員
Ø 沒有使用的本地變量
Ø 沒有使用的私有方法
Ø 沒有使用的方法參數(參數定義了,但是方法內沒有使用此參數)
構建StringBuffer或StringBuilder時,如果知道長度,請指定,這樣性能更好
不指定,則默認長度是16,這樣當長度不夠時,就會有擴容的動作了。
如果本地變量只被賦值一次,那么把它聲明為Final
如果方法參數從來不會被重新賦值,那么把它聲明為Final
如果想由數組構建List,請使用Arrays.asList
數組復制,請使用System.arraycopy,別用循環
""+123的方式把數字轉換為String,不夠高效
示例代碼:
String s = "" + 123; // bad
String t = Integer.toString(456); // ok
避免代碼中出現各種"空"的語句
空Catch,空If,空while,空try,空finally,空switch,空Synchronized塊,空static塊