1. 程式人生 > >工作筆記總結——使用sonar進行程式碼優化

工作筆記總結——使用sonar進行程式碼優化

最近公司使用sonar對專案的程式碼進行檢查,並對發現的問題傳送到內網郵箱,sonar可以分配人員角色和許可權,結合了SVN,將SVN中的最新程式碼下載下來檢查程式碼後打成war包後部署到tomcat上並啟動tomcat

昨天修改了sonar上的問題,如下

1、方法長度過長

修改:將方法中變數較少的程式碼塊放到一個新的方法,引數很多,大概有6-7個,多是String,我開始認為java中所有物件是引用傳參,後來對修改後的方法測試發現對於String來時有點特殊,傳到方法中的String的值沒有被修改,因為String是final的,引用對它來說也沒有用,只要對它進行賦值操作時

問題:如何才能將一個方法長度減短,在有大量引數的情況,上述方法不可行,有沒有什麼好的解決方式。

2、低效的stringbuffer

StringBuffer sb = new StringBuffer();
String str = "abc";
sb.append(str + "def"); //這樣做的話就失去了stringbuffer的意義了
//應該將後面的也用append
sb.append(str).append("def");
如果是在迴圈中就更要避免這樣的情況了

3、使用entrySet

示例程式碼:

Map<String, String> map = new HashMap<String, String>();
StringBuffer sb = new StringBuffer();
低效:
for(String key : map.keySet()) {
	sb.append(key).append(map.get(key)); 
}
高效:
for(Entry<String,String> entry : map.entrySet()) {
	sb.append(entry.getKey()).append(entry.getValue());
}

4、使用char代替Characters

示例程式碼:

StringBuffer sb = new StringBuffer();
低效:
sb.append("."); //對於單個字元其實可以不用String,單個字元包括換行符('\n')、回車符('\r')
高效:
sb.append('.'); //使用char替換String,提高內部轉換


5、使用private修飾符

將成員屬性的修飾符儘可能加上private,提供getter、setter方法

6、多個修飾符的位置不對,不符合JLS

修飾符順序:

private --> protected --> public --> abstract --> static --> final --> transient --> volatile --> synchronned --> native --> strictfp

7、判斷list為空時使用isEmpty,不要使用size與0比較

8、加上final修飾符,避免程式碼漏洞

9、不適用printStackTrace和system.print,使用log代替