文章目录
1.编码规约篇
1.1命名风格
1.1.1 $与_
代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束
为什么?java命名有几个基本的规则
1)、名称只能由字母、数字、下划线、$符号组成
2)、不能以数字开头
3)、名称不能使用JAVA中的关键字。
业务场景举例:
当首字母是数字时,我们得考虑,他后续的也能是数字
long 1000L = 23;
System.out.println(1000L+1);
这时候编译器糊涂了
不能是JAVA关键字开头也是同理
static class A= new class(); 这时候class究竟是关键字,还是一个类?编译器也糊涂了
然而这个不能以下划线或美元符号开始,也不能以下划线或美元符号结束
$开头语结尾,myeclipse的正则搜索都无法搜索到变量名
以_开头或者_感觉是难易阅读
代码例子
@Test
public void dollarAnd_(){
String nameA="test";
String name$="";
String $name="";
String $$__="";
String __$$="";
String nameB="test";
String name="";
String _name="testA";
String __name="A";
String name_="A";
String name__="B";
System.out.println(name+_name+__name+name_+name__);
}
1.1.2 拼音命名的坏处
这个应该是常识
@Test
public void pinyinDisAdvanteage(){
String chuangJianShiJian="";
String shouXuFei="";
System.out.println(chuangJianShiJian+shouXuFei);
String createTime="";
String feeAmount="";
System.out.println(createTime+feeAmount);
}
1.1.3 驼峰命名规格
3.【强制】类名使用 UpperCamelCase 风格,但以下情形例外: DO / BO / DTO / VO / AO /
PO / UID 等。
4.【强制】方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从
驼峰形式
5.【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长
6.【强制】抽象类命名使用 Abstract 或 Base 开头; 异常类命名使用 Exception 结尾; 测试类
命名以它要测试的类的名称开始,以 Test 结尾
9.【强制】包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用
为什么DO可以使用不使用UpperCamelCase(驼峰命名)?
因为DO是DataObject的缩写
BO是BusinessObject(业务对象的缩写)
DTO是DataTransferObject(数据传输对象的缩写)
其他同理
1.1.3.1驼峰命名
引自:https://blog.youkuaiyun.com/zhu_xun/article/details/19912411
命名类别 | 命名规则 |
---|---|
包名 | 全小写,连接词使用-符号 |
类名 | 开头大写 |
局部变量名 | typeVariableName 开头小写 |
常量变量名 | 全部大写,连贯使用_ MAX_VALUE |
Controller变量名 | 模块+操作+Action UserDeleteAction |
Service变量名 | 模块+操作+Service |
Dao变量名 | 模块+操作+Dao |
1.1.4 类型与中括号紧挨相连来表示数组
瞬间知道代码的意思
7. 【强制】类型与中括号紧挨相连来表示数组。
@Test
public void array(){
String[] fruit={"apple","orange"};
String fruit2[]={"apple","orange"};
}
1.1.5 设计模式的命名
12.【推荐】如果模块、 接口、类、方法使用了设计模式,在命名时需体现出具体模式。
通常设计模式都有固定的编写模版,就好像
Logger logger = LoggerFactory.getLogger("AliBabaReading");
使用了工厂模式,别人就知道肯定有一个createProduct的类似的方法。这样子就比较容易理解
1.1.6 接口方法和变量规约
13.【推荐】接口类中的方法和属性不要加任何修饰符号(public 也不要加) ,保持代码的简洁
性,并加上有效的 Javadoc 注释。尽量不要在接口里定义变量,如果一定要定义变量,肯定是
与接口方法相关,并且是整个应用的基础常量。
我们了解到接口是一个所有方法都是抽象方法的抽象类,抽象类因为有抽象方法所以不能被实例化
,因为调用时编译器不知道从哪里找,但如果一个具体的子类实例化他,才能使用
UserService userService = new UserService() ; //报错,是接口,不能被实例化
UserService userService = new UserServiceImpl(); //正确,因为UserServiceImpl事先了接口
因为调用时使用 userService .methodName() ; 而userService 必须依赖 子类的实现,所以使用userService的方法必须支持其他包,所以接口的方法都默认是public,里面的变量也是同理,他必须要支持其他包,而且理解到接口是类的抽象,所以java的作者默认了变量是final static
修饰符 当前类 同包 子类 其他包
public √ √ √ √
protected √ √ √ ×
default √ √ × ×
private √ × × ×
使用javac 和javap命令查看编译优化后的结果
public interface UserService {
int variable=3;
void methodName();
}
14【强制】对于 Service 和 DAO 类,基于 SOA 的理念,暴露出来的服务一定是接口,内部
的实现类用 Impl 的后缀与接口区别。
1.1.7 enum编程规约
15.【参考】枚举类名建议带上 Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开。
public enum StatusCodeEnum {
SUCCESS,FAIL,WARN;
}
1.1.8 各层编码规约
16.【参考】各层命名规约:
A) Service/DAO 层方法命名规约
1) 获取单个对象的方法用 get 做前缀。有fetch,obtain等
2) 获取多个对象的方法用 list 做前缀,复数形式结尾如: listObjects。 有array的存在
3) 获取统计值的方法用 count 做前缀。
4) 插入的方法用 save/insert 做前缀。
5) 删除的方法用 remove/delete 做前缀。
6) 修改的方法用 update 做前缀。
B) 领域模型命名规约
1) 数据对象: xxxDO, xxx 即为数据表名。
2) 数据传输对象: xxxDTO, xxx 为业务领域相关的名称。
3) 展示对象: xxxVO, xxx 一般为网页名称。
4) POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO。