一、注释
- 所有的类、接口、方法都应该加上注释,注释要标明描述、作者、时间等,使信息完备;
- 枚举类的每个枚举字段都要标明注释;
- 方法内部单行注释,在被注释语句上方另起一行,使用//注释。方法内部多行注释使用/* */注释。注意与代码对齐。
- 所有的抽象方法(包括接口中的方法)必须要用javadoc注释、除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。 说明:如有实现和调用注意事项,请一并说明。
- 类、类属性、类方法的注释必须使用javadoc规范,使用/**内容*/格式,不得使用//xxx方式和/*xxx*/方式。
- 命名
- 方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase,必须遵从驼峰形式。
- 常量命名应该全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
- 类名使用UpperCamelCase风格,必须遵从驼峰形式,但以下情形例外:(领域模型的相关命名)DO / BO / DTO / VO / DAO
- 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式
- 代码段
- 单个方法的总行数不超过80行,嵌套层数不能超过5层;
- 不允许任何魔法值(即未经定义的常量)直接出现在代码中。
- 在一个switch块内,每个case要么通过break/return等来终止,要么注释说明程序将继续执行到哪一个case为止;在一个switch块内,都必须包含一个default语句并且放在最后,即使它什么代码也没有。
- 集合初始化时,指定集合初始值大小。(hashMap 不知道多大,可以设置为16,防止反复扩容)。
- Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。
- long或者Long初始赋值时,必须使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解。
- 在if/else/for/while/do语句中必须使用大括号,即使只有一行代码。
- 在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。 不要在方法体内定义:Pattern pattern = Pattern.compile(规则);
- 所有的覆写方法,必须加@Override注解。
- 获取当前毫秒数:System.currentTimeMillis(); 而不是new Date().getTime();
- 对于Service和DAO类,基于SOA的理念,暴露出来的服务一定是接口,内部的实现类用Impl的后缀与接口区别。
- 事务场景中,抛出异常被catch后,如果需要回滚,一定要手动回滚事务。
- 线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。在创建线程池时,要衡量下系统资源,制定合适的参数,如果可以的话,可以使用已经定义好的线程池;
- 不能使用过时的类和方法;
- 及时清理不再使用的代码段或配置信息。
- SimpleDateFormat 是线程不安全的类,一般不要定义为static变量,如果定义为static,必须加锁。
- Map/Set的key为自定义对象时,必须重写hashCode和equals。(注解@Data 实现的equal方法只局限于当前类的字段的判断,无法包含父类)
- 关于基本数据类型与包装数据类型的使用标准如下:
1) 所有的POJO类属性必须使用包装数据类型。
2) RPC方法的返回值和参数必须使用包装数据类型。
3) 所有的局部变量推荐使用基本数据类型。
19. maven pom 依赖版本禁止写成RELEASE版本,因为RELEASE版本是可变的,可能导致依赖的变化而使程序不可用。
20.判断所有集合内部的元素是否为空,使用 isEmpty()
方法,而不是 size()==0
的方式。这是因为 isEmpty()
方法的可读性更好,并且时间复杂度为 O(1)。
21.在使用 java.util.stream.Collectors
类的 toMap()
方法转为 Map
集合时,一定要注意当 value 为 null 时会抛 NPE 异常。
22.hashMap 的key 和 value 都能为null;hashTable key 和 value 均不能为null;ConcurrentHashMap key 和value均不可为null;
23.不要在 foreach 循环里进行元素的 remove/add
操作。remove 元素请使用 Iterator
方式,如果并发操作,需要对 Iterator
对象加锁。
24.使用集合转数组的方法,必须使用集合的 toArray(T[] array)
,传入的是类型完全一致、长度为 0 的空数组。
25.使用工具类 Arrays.asList()
把数组转换成集合时,不能使用其修改集合相关的方法, 它的 add/remove/clear
方法会抛出 UnsupportedOperationException
异常。