注:本文内容整理自《阿里java编码规范》+《代码整洁之道》
代码规范的重点在于保持代码可读性和团队协作的一致性,并不是说不遵守规范代码就无法运行。让代码可读、优雅、漂亮,是一件让自己舒服也让其他读代码的人更加舒服的事情。
本文讲的是传统意义上的代码规范,包括变量命名、代码风格、控制语句、 代码注释等基本的编程习惯,以及从高并发场景中提炼出来的集合处理技巧与并发多线程的注意事项。
命名风格
强制
1、任何名称都不要以下划线、美元符号或者其他特殊符号来开头或者结束。尽可能不要使用特殊符号(常量的下划线除外)。
2、严禁使用汉语拼音或者拼音+英文的命名方式,但是alibaba/taobao/youku/hangzhou等国际通用的名称,可视作英文。
3、类名和接口名使用大驼峰;方法名、参数名、成员变量名、局部变量名使用小驼峰;常量命名使用全大写,如果需要使用下划线分隔,力求语意表达出来,不要嫌长。
4、抽象类命名使用Abstract或者Base开头;异常类命名使用Exception结尾;测试类命名要以它要测试的类名开头,以Test结尾。
5、定义数组使用int[] name中括号紧跟类型的方式。
6、POJO类(实体类)中的布尔型变量不要加is前缀,否则部分框架解析会引起序列化错误。假设变量名是isDeleted,那么生成的方法也是isDeleted,有些框架在反向解析时,由于要获取属性名称,会误以为是deleted,导致属性获取不到而出现异常。
7、包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词,且包名统一使用单数形式比如com.alibaba.ai.util,但是注意,如果类名具有复数含义,可以使用复数形式,比如MessageUtils。
8、杜绝不规范的缩写,比如AbstractClass缩写成AbsClass,condition缩写成condi,此类随意的缩写严重降低了代码的可读性。
9、对于Service和Dao类,内部的实现类使用Impl后缀。
推荐
1、尽可能使用完整的可自解释的英文单词来命名,不要怕太长,比如在JDK中就有AtomicReferenceFieldUpdater,绝对要避免随意的命名比如a/b/kk等。
2、接口中的属性和方法不要加任何的修饰符,保持代码的简洁性。并提供Javadoc文档注释。另外尽量不要在接口中定义任何变量,如果一定要定义,则必须是和接口相关的,并且是整个应用的基础常量。
3、类名和属性名等一般使用名词或者名词短语;方法名一般使用动词或者动词+名词;属性访问器、修改器和断言应该根据其值命名,并依次加上get、set和is前缀。
参考
1、枚举类以Enum为后缀,并且枚举类的常量使用全大写+下划线的命名方式。
2、获取单个对象的方法用get做前缀;获取多个对象的方法使用list做前缀;获取统计值的方法使用count做前缀;插入的方法使用save/insert做前缀;删除的方法使用remove/delete做前缀;修改的方法使用update做前缀。
常量定义
强制
1、不允许任何魔法数字直接出现在代码中。
2、long或者Long类型的变量在赋值时,后面要加上大写的L。
推荐
1、不要使用一个常量类来维护所有的常量,要按照功能进行分类,分开维护。比如缓存相关的常量放在类CacheConsts下,系统配置相关的常量放在类ConfigConsts下。
2、常量的复用层次共有5层。跨应用共享常量要放置在二方库中,通常是client.jar的constant目录下;应用内共享常量要放置在一方库中,通常是子模块的constant目录下;子工程内部共享常量放在子工程的co