程序猿最讨厌的三件事:写文档、给代码写注释、看别人的代码。具有美感的代码总是让人赏心悦目,流连中多看几眼。有时候看到别人写的糟糕的代码糟糕的设计,总是忍不住想去美化一下。
普通的编程规约我相信大家都了解也遵守着,也有些大家容易疏忽的,对于编程要注意的事项我总结了以下几点:
- 【编程规约】类中类型的变量不要以is开头,有些框架解析会出现序列化错误
- 【编程规约】 枚举类名建议带上 Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开
- 【编程规约】if/for/while/switch/do 等保留字与左右括号之间都必须加空格,即使只有一行代码也必须使用大括号
正例:
if (flag == true) {
express1
} else {
express2
}
反例:
if(condition){
express1
}else{
express2
}
反例:
if (condition)
statements;
尽量少用else, 如果条件不成立而不需要往下执行的情况下,优先判断不成立的情况,比如
if(condition){
…
return obj;
}
接着再写else的逻辑
- 【编程规约】 单行字符数限制不超过 120 个,超出需要换行,换行时,遵循如下原则:
1) 换行时相对上一行缩进 4 个空格。
2) 运算符与下文一起换行。
3) 方法调用的点符号与下文一起换行。
4) 在多个参数超长,逗号后进行换行。
5) 在括号前不要换行,见反例。
正例:
StringBuffer sb = new StringBuffer();
//超过 120 个字符的情况下,换行缩进 4 个空格,并且方法前的点符号一起换行
sb.append("zi").append("xin")…
.append("huang");
反例:
StringBuffer sb = new StringBuffer();
//超过 120 个字符的情况下,不要在括号前换行
sb.append("zi").append("xin")…append
("huang");
//参数很多的方法调用也超过 120 个字符,逗号后才是换行处
method(args1, args2, args3, ...
, argsX);
- 【编程规约】方法参数在定义和传入时,多个参数逗号后边必须加空格。
正例:下例中实参的"a",后边必须要有一个空格。
method("a", "b", "c");
- 【编程规约】不允许使用过时的类或方法
- 【编程规约】不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator方式,如果并发操作,需要对 Iterator 对象加锁
for (String temp : a) {
if ("1".equals(temp)) {
a.remove(temp);
}
}
- 【编程规约】禁止对大段代码进行 try-catch,这是不负责任的表现
- 【编程规约】有 try 块放到了事务代码中,catch 异常后,如果需要回滚事务,一定要注意手动回滚事务
- 【编程规约】集合里的元素即使 isNotEmpty,取出的数据元素也可能为 null
- 【编程规约】创建泛型类实例不要直接new,应考虑使用静态工厂方法,例如
public static <E> List<E> newListInstance() {
return new ArrayList<E>();
}
【编程规约】涉及到货币的时候禁止使用float double,应使用BigDecimal,不过要避免使用new BigDecimal(double),当double必须用作BigDecimal的源时,请使用Double.toString(double)转成String,然后使用String构造方法,或使用BigDecimal的静态方法valueOf
【日志规约】应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架SLF4J 中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(Abc.class);
- 【日志规约】日志打印推荐使用占位符方式,不推荐使用字符串拼接
log.info("print param1{}, param2{}", param1, param2);
- 【SQL规约】如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释
- 【SQL规约】不要使用 count(列名)或 count(常量)来替代 count(),count()就是 SQL92 定义的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。
说明:count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行
- 【SQL规约】不得使用外键与级联,一切外键概念必须在应用层解决
- 【SQL规约】禁止使用存储过程,存储过程难以调试和扩展,更没有移植性
- 【SQL规约】禁止使用 * 作为查询的字段列表,需要哪些字段必须明确写明
- 【SQL规约】xml 配置中参数注意使用:#{},#param# 不要使用${} 此种方式容易出现 SQL 注入
- 【SQL规约】字段禁止创建为enum类型,要插入enum的值,字段必须加引号,不加引号当然是数字,数字就是key,不是value。一般用tinyint代替,在应用层规约。enum是整型这样的错误很容易发生,尤其是php弱类型的,没注意enum类型,就会犯错。
参考了阿里出品的《阿里巴巴java开发手册》,每个人都需要去读一遍
欢迎大家在评论里补充,大家有好的建议我会采纳在21条后面继续加