前言
下面的文章都是摘抄阿里巴巴的Java开发规范,如果已经阅读过该书的小伙伴们可以直接跳过了, 如果还没有阅读过该书的小伙伴可以去网上找找资源,或者下面直接评论我也可以分享出来,下面是我看时留下的一些笔记。
编程规约
命名
-
代码的命名严禁采用拼音和英文混合的形式
-
类名需要使用UpperCamelCase风格
MapPolo/ UserDo /
- 方法名、参数名、成员变量和局部变量都统一采用lowerCamelCase风格
localHost / dishMapper
- 常量名全部大写,单词间用下划线隔开
MAX _ STOCK _ COUNT
- 抽象类使用Abstract或Base开头,异常类命名使用Exception结尾,测试类以需要测试的类名开头,以Test结尾
BaseUser / CommonException / UserServiceTest
- 类型和中括号紧挨相连来表示数组
int[] arrayDemo;
- 包名统一用小写,点分隔之间有且仅有一个自然语义的英语单词
com.dy.example.util
- 如果接口、类、方法使用了设计模式,在命名时需体现出具体的模式,有利于阅读者快速理解架构设计理念
public class OrderFactory;
-
接口的方法和属性不需要加任何修饰符号(public也不要加),保持代码的简洁性,加上有效的Javadoc注解,不再接口内定义变量,如果一定要定义变量,肯定是
与接口方法相关,并且是整个应用的基础常量void commit();
-
对于Service和DAO类,暴露出来的一定是接口,内部的实现类用Impl的后缀与接口区别。
UserServiceImpl 实现 UserService接口
Service/DAO层方法规范
获取单个对象的方法用 get 做前缀。
获取多个对象的方法用 list 做前缀,复数形式结尾如:listObjects。
获取统计值的方法用 count 做前缀。
插入的方法用 save/insert 做前缀。
删除的方法用 remove/delete 做前缀。
修改的方法用 update 做前缀。
-
领域模型命名规约
数据对象: xxxDO , xxx 即为数据表名
数据传输对象: xxxDTO , xxx 为业务领域相关的名称
展示对象: xxxVO , xxx 一般为网页名称
POJO 是 DO / DTO / BO / VO 的统称,禁止命名成 xxxPOJO
常量定义
- 不允许任何未定义就出现的魔法值
- 在long或者Long类型赋值,数值后使用大写的L,不能是小写的l
代码格式
-
大括号{}为空,就简洁写成{}即可,不需要换行,不为空时;
// 大括号内为空,简写成{} public void test(){}; // 左大括号前不换行 //左大括号后换行 //右括号前换行 public void test() { String test; public void test() { boolean flag = true; if(flag){ } else { } } //右大括号后还有else等代码则不换行,表示终止的右大括号后必须换行
-
if/for/while/switch/do 等保留字与括号需要加一个空格。
-
任何二目、三目运算符的左右两边都需要加一个空格
-
注释的双斜线与注释内容之间需要有一个空格
// 这是注释,请注意双斜线后有一个空格
String ygb = new String();
-
单行字符数限制不超过120个, 超出需要换行。
1)第二行相对第一行缩进4个空格,从第三行起,不再继续缩进
2)运算符与下文一起换行
3)方法调用的点符号与下文一起换行
4)方法调用中的多个参数需要换行时,在逗号后进行
5)在括号前不要换行
StringBuffer sb = new StringBuffer();
// 超过 120 个字符的情况下,换行缩进 4 个空格,点号和方法名称一起换行
sb.append("zi").append("xin")...
.append("huang")...
.append("huang")...
.append("huang");
- 方法参数在定义和传入时,多个参数逗号后必须加空格
method(args1, args2, args3);
- 单个方法的总行数不超过80行
OPP 规约
-
避免通过一个类的对象引用来访问此类的静态变量或静态方法,无需增加编译器解析成本
-
Object的equals方法容易抛出NPE异常,应采用常量或确定有值的对象来调用eauals。
"dy".equals(object);
-
构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,需要放在自己写的init方法中。
-
final关键字可以用来声明类、成员变量、方法、以及本地变量
-
不允许被继承的类,如: String类
-
不允许修改引用的域对象
-
不允许被重写的方法,如实体类的setter方法
-
不允许运行过程中重新赋值的局部变量
-
避免上下文重复使用一个变量,使用final描述可以强制重新定义一个变量,方便更好地进行重构。
-
-
类成员和方法访问
描述 | 关键字 |
---|---|
不允许外部直接通过new来创建对象 | private |
工具类不允许有public或default等构造方法 | |
类非static成员变量并且与子类共享 | protected |
类非static成员变量并且仅在本类使用 | private |
类static成功变量如果仅在本类使用 | private |
static成员变量 | 考虑是否为final |
类成员方法只供内部类调用 | private |
类成员方法只对继承类公开 | protected |
集合处理
- 使用集合时,需要指定集合初始值大小
// 一般初始化大小的为(需要存储的元素个数 / 负载因子) + 1,
// 一般负载因子为0.75, 当无法确定初始值大小时,我们一般设置为16
HashMap<String> map = new HashMap<>(4);
- 遍历Map集合时,采用entrySet遍历Map类集合,而不是KeySet方式进行遍历。
原规范的说明: keySet 其实是遍历了 2 次,一次是转为 Iterator 对象,另一次是hashMap 中取出key 所对应的 value 。而 entrySet 只是遍历了一次就把 key 和 value 都放到了 entry 中,效率更高。如果是 JDK 8,使用 Map . foreach 方法。
控制语句
-
在switch块内,每个case都得通过break/return停来止****
-
在if / else / for / while / do 语句中必须采用大括号,就算只有一行代码也得需要加括号
-
表达异常的分支时,少用 if-else 方式,如果一定要写,避免维护困难,请勿超过3层
最后
其实阿里巴巴的Java开发规范远不止上述这一点内容,具体大家可以去网上找一下资源,下载过来看看,如果觉得太麻烦的话,可以在日常练习中练习好规范
IDEA中使用alibaba的开发规范
在IDEA的插件市场中安装–》工具–》阿里巴巴编码规约,就可以提示你啦