JAVA代码静态检测之PMD

今天再次想启动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块