编程规约需要注意的
- 抽象类必须以Abstract或者Base开头,自定义异常类以Exception结尾,单元测试类以Test结尾
- 布尔类型的变量不要以Is开头,防止部分框架序列化会有问题。
- 包名以统一小写,点分隔符之间有且仅有一个英语单词,而且必须是单数形式,类可以复数
如果用到了设计模式必须要将设计模式的名称体现在类名里面
OrderFactory PoolSingleton LoginProxy ResourceObserver
- 接口中的方法和属性不要加任何修饰符
- 枚举类命名以Enum结尾,里面的变量都是大写
各层命名规则
service或dao层 1) 获取单个对象的方法用get做前缀。 2) 获取多个对象的方法用list做前缀。 3) 获取统计值的方法用count做前缀。 4) 插入的方法用save(推荐)或insert做前缀。 5) 删除的方法用remove(推荐)或delete做前缀。 6) 修改的方法用update做前缀。 领域模型命名规约 1) 数据对象:xxxDO,xxx即为数据表名。 2) 数据传输对象:xxxDTO,xxx为业务领域相关的名称。 3) 展示对象:xxxVO,xxx一般为网页名称。 4) POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。
常量定义
- 常量命名全大写,单词间用下划线隔开
不要让未经定义的常量直接出现在代码。
哪怕改变量只出现一次,也要定义专门的常量 String key = "Id#taobao_" + tradeId; cache.put(key, value);
- long类型的变量赋值时候一大写的L结尾,防止混淆
- 不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护
- 缓存相关的常量放在类:CacheConsts下;系统配置相关的常量放在类:ConfigConsts下。
代码格式
- if/for/while/switch/do等保留字与括号之间都必须加空
- 缩进采用4个空格,禁止使用tab字符
- 方法参数在定义和传入时,多个参数逗号后边必须加空格
- IDE的text file encoding设置为UTF-8; IDE中文件的换行符使用Unix格式
OOP规约
- 静态变量或者静态方法直接类名点进行访问,没必要new一个对象进行访问,徒增编译器成本
- 所有重写方法加上@Override注解
- 相同的参数类型,相同的业务含义,才可以使用可变参数,尽量不要使用object,不要给后人挖坑
- 接口过时必须加@Deprecated注解
- 不能使用过时的方法和类
相同类型包装类对象最好以equal方式比较大小。
例如Integer在-128至127范围内的赋值, Integer对象是在IntegerCache.cache产生,会复用已有对象
所有的POJO变量都使用包装对象类型
RPC方法的参数和返回值都是使用包装对象类型
所有的局部变量都使用基本类型
POJO类不要给变量设置默认值
序列化类新增属性时候不要修改 serialVersionUID的值
构造方法里面不要加任何业务逻辑,如果要加在init方法里面加
POJO类必须写toString方法
- 内种方法定义顺序是 公有的或者保护的方法==》私有方法==》getter和setter
- 字符串连接方式以StringBuilder的append方式
类成员与方法访问控制从
1) 如果不允许外部直接通过new来创建对象,那么构造方法必须是private。 2) 工具类不允许有public或default构造方法。 3) 类非static成员变量并且与子类共享,必须是protected! 4) 类非static成员变量并且仅在本类使用,必须是private。 5) 类static成员变量如果仅在本类使用,必须是private! 6) 若是static成员变量,必须考虑是否为final! 7) 类成员方法只供类内部调用,必须是private。 8) 类成员方法只对继承类公开,那么限制为protected!
集合处理
- 关于hashCode和equals的处理
使用Arrays.asList()方法时候,不能使用其修改相关集合的方法,
它的add/remove/clear方法会抛出UnsupportedOperationException异常 Arrays.asList()//返回的是个ArrayList 匿名类 ArrayList