看看:Java编程思想、effective Java、代码整洁之道 等。
代码review:
包含:IDEA提示的黄色的可以优化的部分(比如可以改成lamda表达式的地方,光标定位到那里,然后option+enter会弹出提示换成lamda);格式化代码(命令是command+alt+L);
循环里注意,避免出现循环查数据库的操作,可以通过一次查询把所有的数据都查出来,存储到一个结构里,下次查这个结构;
规范:
- 命名:类名多用名词,方法多用动词。
model类起名时,如果是数据传输对象(DTO),比如方法的参数或返回的json需要转化为类对象,结尾可以以"ReqDTO"、 "ResDTO"结尾。 传给前端的数据以VO结尾,查数据库得到的类以DO结尾。
常量要大写,例如:
private static final String VERSION_NO = “1.03”; - 函数设计原则:短小,函数参数避免3个以上。 使用异常代替返回错误码。
- 用TODO来注释:如果任务量很多,需要分批次完成,可以在以后需要做的地方加上TODO注释,下次就方便查找哪里还没完成。
- 所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较。
【说明:对于Integer var=?在-128至127之间的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用equals方法进行判断。】 - 类内方法定义顺序依次是:公有方法或保护方法 > 私有方法 > getter/setter方法。
- 数组转为集合时,作Arrays.asList()时,实际得到的是原有数组的视图,此时的list如果作修改会曝出UnsupportedOperationException
String[] str = new String[] { "a", "b" };
List list = Arrays.asList(str);
//list.add("c"); //UnsupportedOperationException
List<String> list2= new ArrayList<>();
list2.addAll(list);
list2.add("c"); // 这样写才OK
7 . 不要在 for循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator 对象加锁。
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
// wrong!!
for (String temp : list) {
if ("1".equals(temp)) {
list.remove(temp);
}
}
// correct
Iterator<String> it = list.iterator();
while (it.hasNext()) {
if ("1".equals(it.next())) {
it.remove();
}
}
8 . 对map的遍历,使用 entrySet 遍历效率高,而不是 keySet
Map<String, Integer> map = new HashMap<>();
map.put("zs", 98);
map.put("lisi", 94);
// 遍历map
Set<Entry<String, Integer>> set = map.entrySet();
Iterator<Map.Entry<String, Integer>> iterator = set.iterator();
while (iterator.hasNext()) {
Map.Entry<String, Integer> me = iterator.next();
System.out.println(me.getKey());
System.out.println(me.getValue());
System.out.println("---------------");
}
9 . Map 类是否能存储null
10 . 并发规范:
https://blog.youkuaiyun.com/tonghuawanli/article/details/81359305
IDEA设置code style
需要提前有文件:GoogleStyle***.xml
参见图片设置:
之后在需要设置的文件,按 command + alt + L