编码规范的目的:使自己的代码 易读、易扩展、易维护、高性能。
代码规范
变量名要清晰且简短。能用一个单词就不要使用两个。上下文会帮助理解。
一个方法代码不能超过40行。
类、成员变量的注释信息必须符合Java doc规范。
一般情况下,有 if 必须有 else,保证严谨,代码漏掉任何一种可能出现的情况,都可能产生意想不到的灾难性结果。且注意不要扩大条件作用域。
DAO 中方法命名规范:查实体,findXXX;查数量, countXXX。
提交代码前,清除不必要的注释和输出信息,并检查代码是否清晰,严谨,易读和简洁。
方法要有明确的输入和输出。不要依赖 引用变量 的特性,因为那样的方法不清晰。
方法中的变量,尽量只在一处变化,方便后期维护。
能减少依赖则减少依赖。耦合的代码,后期很难拆分。
不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。示例代码:
Iterator<String> it = a.iterator();
while (it.hasNext()) {
String temp = it.next();
if (删除元素的条件) {
it.remove();
}
}
Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。推荐使用java.util.Objects#equals。
表达异常的分支时,少用if-else方式,这种方式可以改写成:
if (condition) {
...
return obj;
}
// 接着写 else 的业务逻辑代码;
DRY,Don’t Repeat Yourself。如果随意复制粘贴代码,以后修改时,则需要修改所有的副本,容易遗漏。必要时抽取共性方法,或者抽象公共类,甚至是共用模块。
- 如果能预料到可能的扩展,必须把代码写的可配置,方便修改。比如签到功能,正常使用时周期为一天。但是测试时就不能按照周期为1天来测试,这个周期必须方便修改以配合测试。
异常处理
- 能通过预先检查进行规避的异常,就不要使用try …… catch….. 。
- 尽量try 少量的代码,对于稳定的代码要放在try外面。
分清楚异常类型,再进行对应的处理。捕获的和抛出的异常必须完全匹配。
返回类型为基本数据类型,return包装数据类型的对象时,自动拆箱有可能产生NPE。
数据库
如果字段为非负数,必须使用unsigned。无符号值可以避免误存负数,且精确了表示范围。
数据库字段名的修改代价很大,因为无法进行预发布,所以字段名需要慎重考虑。
表名不使用复数名词。
小数类型为decimal,禁止使用float和double。
如果存储的字符串长度几乎相等,使用char定长字符串类型。
合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。
EXPLAIN 结果中 type 类型由优到差顺序:consts、ref、range、index。
建立组合索引时,区分度最高的放在最左边。
防止因字段类型不同造成的隐式转换,导致索引失效。