本文最后更新于 774 天前,其中的信息可能已经有所发展或是发生改变。
为什么要有编码规范
编码规范对于程序员而言尤为重要,有以下几个原因:
- 一个软件的生命周期中,80%的花费在于维护
- 几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护
- 编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码
- 如果你将源码作为产品发布,就需要确任它是否被很好的打包并且清晰无误,一如你已构建的其它任何产品
为了执行规范,每个软件开发人员必须一致遵守编码规范
遵循阿里的的编码规范(P3C)
- 安装IDE插件
什么是代码复查(Code Review)?
- 代码复查又叫“代码审查”,其基本思想是在开发人员编写完自己的代码后,由其他人进行复查,检查代码中存在的问题。
- p代码复查的一个基本理论是,当越早发现代码存在的缺陷,解决缺陷的代价就越低。
代码复查往往分成以下一个方面进行审查:
- 代码风格
- 代码格式
- 重大缺陷
- SQL注入问题
- 性能问题
- 设计逻辑与思路的审查
- 代码逻辑控制是否有问题
- 代码是否与最初的设计存在出入
代码复查常见问题
1.代码格式
- 未安装静态代码检查工具
- 代码的缩进仍然使用TAB键,而不是空格
- 未使用快捷键“Ctrl Shift F”格式化
2.代码注释
- 存在大段代码没有注释的情况,最好有简单的注释说明一下。
- 程序的重要分支没有注释,分支的注释有利于理解业务逻辑。
- 代码注释与实现不一致。
- 代码注释多余或者没有实际意义。
- 常量注释最好采用多行注释的风格而非单行注释。
- 说明:这样做的原因是,在IDE中,外部调用常量的地方可以看到注释
3.命名规范
- 常量定义问题,很多数字(魔法数字)、字符应该定义为常量,并指定有意义的名称,便于理解和维护
4.代码结构
- 程序没有分层的概念
- 每层的职责要分明
- 类方法的参数列表过长,应该抽象为一个参数类
- 存在多层if嵌套和多层while嵌套的情况
- 无效的引用,代码中存在很多无效的包、类引用,应该去掉没用到的引用,或者使用快捷键CTRL SHIFT O重新组织一下导入
- 无效代码
- 存在空的方法或者没用到的变量,建议删除。
- 一些业务处理类的方法参数中有pageNo相关的参数,但是实际上该函数并没有进行分页处理。
- 复查时,经常看到大段的代码被注释掉,建议删除。 咱们有svn,如果想找到,可以查看svn历史版本。
第一章 正确性检查
1. 数据类型处理
int类型的数据作除法时要注意,得到的有可能不是想要的结果。
代码语言:javascript复制int iFz= 2;
int iFm = 3; // 可能为0
// 错误的做法
Double present = iFz / iFm; // 实际得到的是0
*********************
int iFz= 2;
int iFm = 3; // 可能为0
// 正确的做法
if(iFm != 0) {
Present = (double)iFz/iFm; // 做强制类型转换
} else {
Present = 100;
}
- 字符串判断时,空串和空格串的差异需要注意,apache common包中提供了相关的判断方法。
String str="";
if (str != null &&str.length() != 0){
//do sth
}
=====================================================================
String str="";
if (StringUtils.isNotBlank(str)){
//do sth
}
- Equals方法的使用
- 字符串比较应当使用equals方法。
- 应该用常量字符串在前,比较变量,避免null错误。
String str_temp="temp";
if(str_temp=="test"){
//do sth
}
******************
//正确的方法
String str_temp="temp";
if("test".equals(str_temp)){
//do sth
}
- 日期处理时,增加一个月,有代码实现时采用了加30天的做法。应该使用
java8
里的日期处理类 - 不应当使用字符串拼接的方式,应该用
StringBuffer
或者StringBuilder
代替 - 多个数据库操作,没有使用事务(编程式事务、声明式事务)
- 当发生异常时,一般先回滚事务,然后记录日志或者再抛异常,回滚事务意味着及早释放锁资源,并且防止记录日志时出异常,导致无法回滚。
try {
//do sth
commit(status);
} catch (Exception e) {
rollback(status);//首先回滚事务,释放锁资源
LOG.error("处理失败:", e);//再记录日志
}
Select *的使用,程序中不建议类似方式,需要明确写出要查询的列,避免列太多。
打开文件后,没有关闭,导致文件占用。
记录日志时应该避免出现NullPointException。
Post Views: 326