Posted on 2006-07-05 15:43
left 阅读(1530)
评论(1) 编辑 收藏
常见错误
不符合团队代码、设计规范
循环的一次操作中多次调用iterator.next()
数据库、流等资源未关闭
HttpSession内存储的对象 不可序列化
空指针引用
可能的空指针引用
正则表达式格式错误
PreparedStatement的参数设置/ ResultSet内容访问,从索引0开始
忽略方法返回值, 如 String a=.. ; a.trim();
使用new Boolean(true)
调用 new String(string )
使用+连接String
调用 gc资源回收 代码
自增量的覆盖 i=i++;
Serializable对象包涵Non-transient non-serializable对象
Initialization circularity 循环初始化过程
Date 类型set函数的参数范围错误, 月份为[0,11]...
绝对路径的硬编码 File("/home/dannyc/deployment");
java.lang.Integer、 java.lang.Float、或String对象 比较 使用==或者 !=
测试浮点数的相等性,使用if ( Math.abs(x - y) < .0000001 )
数组对象比较使用equals, 应使用 java.util.Arrays.equals(Object[], Object[]).
对象定义了equal、 tostring、或者hashcode方法
jsp错误
不良习惯
不符合Camel命名原则
重复代码
三值逻辑
无用的代码流程控制
非null值的null判断, null比较
调用 String.equals("")
String对象上调用toString()
整数除的结果转换为float/double
不需要的instanceof判断 / 没必要的对象cast操作
无用、未用的 field, parameters, local variable
从未被调用的方法
整数是否为奇数判断 x % 2 == 1
方法返回null
调用subString(0)
PreparedStatement使用非final的sql String 对象
public finalize()
常用的metics
McCabe 复杂性
代码嵌套深度
代码圈复杂性
建议
Comparator实现 Serializable接口
考虑缓存常用的值,比如关于常量的计算值
避免深层次 if 嵌套语句
解决??
严格执行编程规范
使用优秀、经过验证的框架、可重用包、思想
代码评审 / 结对编程 / 代码质量自动检查工具
简单编程
测试驱动开发
参考:
findbugs: http://findbugs.sourceforge.net/
metrics: http://metrics.sourceforge.net/
pmd: http://pmd.sourceforge.net/