这一段时间做了些代码重构的工作,代码检查工具是在sonar,它集成了CheckStyle,PMD,Findbugs的代码校验规则,现把最近的工作总结如下:
1、抛出捕获异常
1.1 不要抛出原始异常,如:throw RuntimeException()
1.2 不要声明冗余的异常,在方法中声明的时候用throws,方法体中并不会出现的异常不要声明
1.3 不要仅仅重新抛出异常,不做任何处理直接throw e,没有意义,徒增代码量和复杂度
1.4 能在代码判断出的问题,就不要用catch,提高性能,如:不要catch NullPointerException
1.5 尽量不要catch Exception,捕获异常一定要准确
1.6 catch捕获异常后立即抛出,抛出的new Exception需要带上捕获到的exception,即已old exception为参数来实例化new exception,不然,会丢失stack trace
2、类、方法、成员变量注意事项
2.1 修饰符顺序 The correct order is :
public, protected, private, abstract, static, final, transient, volatile, synchronized, native, strictfp.
2.2 成员变量,除了 static final可以是public,别的都必须是private,提供get set方法
2.3 对于final修饰的成员变量,直接再加上static修饰,提高性能,且变量名全用大写字母
2.4 不使用重复的字符串,当一个字符串重复使用时,抽取成一个常量,extract constant
2.5 不在instance方法中修改static属性,写一个static的方法来修改static变量,在instance方法 中调用
2.6 return的时候,没必要创建变量,
如:int i = 1; return i;
改成 return 1;
return布尔值的时候,尽量简化
如: if(){return true;}else{return false}
改成:if(){return true;}return false
2.7 方法体中不允许修改方法的参数,如果确实需要修改,再声明一个变量
2.8 JavaBean中有变量是Timestamp的时候,get set方法需要做处理,不能直接试用ts,而是new Timestamp(ts.getTime())
2.9 不在构造方法中调用Thread.start()起多线程,另写一个方法,初始化对象后调用;
写一个组件的时候,写init的同时记得写destroy,销毁属性对象和线程
2.10 尽量不使用匿名内部类
2.11 单例模式,只有一个private的构造方法,建议声明成final类
3、Connection Statement ResultSet等对象一定要在finally中关闭,且在finally中需要try catch
4、HashMap的遍历,试用map.entrySet(),不使用map.keySet()
5、编码风格
5.1 if else语句必须使用大括号
5.2 静态常量必须是全大写字母
5.3 普通变量必须以小写字母开头,只能由大小写字母和数字组成
5.4 方法名必须以小写字母开头,只能由大小写字母和数字组成
5.5 代码中未使用的引用import,删掉