日常代码开发中的规范
- '在if/else/for/while/do语句中必须使用大括号,即使只有一行代码。避免使用下面的形式:if (condition) statements;
- 包装类型间的相等判断应该用equals,而不是’!='。说明:对于Integer var=?在-128至127之间的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用equals方法进行判断。
- 所有的覆写方法,必须加@Override注解。 反例:getObject()与get0bject()的问题。一个是字母的O,一个是数字的0,加@Override可以准确判断是否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错
- Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。
- 在一个switch块内,每个case要么通过break/return等来终止,要么注释说明程序将继续执行到哪一个case为止;在一个switch块内,都必须包含一个default语句并且放在最后,即使它什么代码也没有。
- 常量命名应该全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长
- 抽象类命名使用Abstract或Base开头
- 方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase,必须遵从驼峰形式
- 不允许任何魔法值(即未经定义的常量)直接出现在代码中。(如果使用范围很小(比如只有某个方法用),可以使用,但是必须加以说明魔法值的含义)
- 所有的抽象方法(包括接口中的方法)必须要用javadoc注释、除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。 说明:如有实现和调用注意事项,请一并说明
- 及时清理不再使用的代码段或配置信息。 说明:对于垃圾代码或过时配置,坚决清理干净,避免程序过度臃肿,代码冗余。
- 类、类属性、类方法的注释必须使用javadoc规范,使用/*内容/格式,不得使用//xxx方式和/xxx/方式。 说明:在IDE编辑窗口中,javadoc方式会提示相关注释,生成javadoc可以正确输出相应注释;在IDE中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率
- 所有的POJO类属性必须使用包装数据类型。
- RPC方法的返回值和参数必须使用包装数据类型。
- 所有的枚举类型字段必须要有注释,说明每个数据项的用途。
- 所有的枚举类型字段必须要有注释,说明每个数据项的用途。
- 类名使用UpperCamelCase风格,必须遵从驼峰形式,但以下情形例外:(领域模型的相关命名)DO / BO / DTO / VO / DAO。
- 不能使用过时的类或方法。
- 单个方法的总行数不超过80行。
- long或者Long初始赋值时,必须使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解。
- 返回类型为基本数据类型,return包装数据类型的对象时,自动拆箱有可能产生NPE(空指针异常 NullPointerException)。
- 打印日志使用log.info(),不要用System.out.println,System.out.println打印的方式不会记录到日志文件。
- 线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。
- 除常用方法(如getXxx/isXxx)等外,不要在条件判断中执行复杂的语句,将复杂逻辑判断的结果赋值给一个有意义的布尔变量,以提高可读性。
- 注意添加类注释,每个类都应有注释信息
- 获取当前毫秒数:System.currentTimeMillis(); 而不是new Date().getTime()。说明:new Date()获取和当前时间有关各方面信息,如果只是需要获取毫秒数,直接使用System.currentTimeMillis(),效率会高一些。通常性能就是这样一点一点消耗掉的。
- feign接口建议不要直接返回非结构化的数据对象
- 方法嵌套大量if else,建议拆分
- 接口入参建议不要使用非结构化的数据对象进行传递