一、命名规范
1、代码中的命名不能以下划线“_”和美元符号“$”为开始或结束。
2、禁止出现拼音和英文混合的方式命名,禁止出现中文命名。
3、类名使用大驼峰命名法,DO、BO、DTO、VO、AO等情况例外。
4、方法名、参数名、成员变量、局部变量都统一使用小驼峰命名法风格。
5、变量命名规范:
(1)常量名全部大写,单词之间用“_”间隔,语义表达清楚。
(2)不允许任何魔法值(未经预先定义的常量)直接出现在代码中,若要使用,直接放在常量池后,进行调用。
例:
此处的10只有在此处可以明确知道其定义,如果 // 处有大量代码,程序可读性大大降低,魔法值的存在不利于程序的开发。应改为:
(3)不要使用一个常量类维护所有常量,需要按功能对常量进行分类维护。
(4)常量的命名、注释要清晰可见,方便维护。显然地址1的方式更合适。
6、抽象类命名使用Abstract或Base开头;接口的实现类以Impl结尾;异常类命名使用Exception结尾;测试类 命名以它要测试的类的名称开始,以Test结尾。controller、servlet、service、filter命名同理。
7、为了达到代码自解释的目标,任何自定义编程元素在命名时,使用尽量完整的单词组合来表达其意。杜绝完全不规范的缩写,避免望文不知义。
8、若模块、接口、类、方法使用了设计模式,命名时要体现出具体模式。
9、模块需要分层命名,包名使用小写单数形式。比如下图可以清晰的看到哪个是dao模块,哪个是model模块等。
二、代码格式
这个使用编辑器的自动化格式就可以了,需要注意以下几点:
1、单行字符数不超过120个,超出需换行。实际上,为了阅读方便屏幕满了就换行就可以。
2、IDE的text file encoding设置为UTF-8,参考链接;IDE中文件的换行符使用Unix格式,不要使用 Windows格式,File->Settings->Code Style->Line separator。
3、不同逻辑、不同语义、不同业务的代码之间插入一个空行分隔开来以提升可读性。
三、接口、类、方法
1、访问静态变量或静态方法,直接用类名进行方法。虽然可以用对象进行访问,但是会增加不必要的编译器解析成本。
2、所有的覆盖方法,必须使用@Override注解。
3、使用常量或者非空对象调用equals。若对象为null,会抛空指针异常。
四、编码中需要注意的事项
1、if…else语句层数尽量少。
因为多层判断语句在后续维护过程中,修改一层判断条件可能会导致整个逻辑混乱。
多层判断语句使用卫语句、策略模式、状态模式来实现。
卫语句就是把复杂的条件表达式拆分成多个条件表达式,比如一个很复杂的表达式,嵌套了好几层的if - then-else语句,转换为多个if语句,实现它的逻辑,这多条的if语句就是卫语句。
2、定义成员变量时,命名不要加is,因为boolean类型的方法自动生成时会有is。比如定义变量isSelected,其方法也是isSelected(),RPC框架在反向解析的时候,“误以为”对应的属性名称是selected,导致属性获取不到,进而抛出异常。
五、注释
1、类、类属性、类方法的注释使用
/**
- 内容
*/
2、所有的类都必须添加创建者和日期。
3、所有的枚举类型字段必须要有注释,说明每个数据项的用途。