java规约

来源:互联网 发布:八上历史行知天下答案 编辑:程序博客网 时间:2024/05/18 01:04

一 编程规约

(一)命名风格
1.由字母、数字、下划线、美元符号组成。不能下划线或美元符号开始,也不以下划线或美元符号结束。2.类名使用UpperCamelCase风格。抽象类命名使用Abstract或Base开头,异常类命名使用Exception结尾,
测试类以测试的类的名称开始,以Test结尾。3.方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase风格。4.常量名全部大写,单词间用下划线隔开。5.接口类中的方法和属性不要加任何修饰符号(public也不要加)。6.内部的实现类用Impl的后缀与接口的区别。eg:CacheServiceImpl实现CacheService接口。7.枚举类名建议带上Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开。8.包名统一使用小写 应用工具类包名为com.alibaba.open.util。9.Service/DAO层命名规约(1)插入的方法用save/insert做前缀。(2)删除的方法用remove/delete做前缀。(3)修改的方法用update做前缀。(4)获取单个对象的方法用get做前缀。(5)获取多个对象的方法用list做前缀。(6)获取统计值的方法用count做前缀。
(二)常量定义
1.long或者Long初始赋值时,使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解。
2.不要使用一个常量类维护所有常量,按常量功能进行归类,分开维护。
3.常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。
(1)跨应用共享常量:放置在二方库中,通常是client.jar中的constant目录下。
(2)应用内共享常量:放置在一方库中,通常是moudles中的constant目录下。
(3)子工程内部共享常量:即在当前子程序的constant目录下。
(4)包内共享常量:即在当前包下单独的constant目录下。
(5)类内共享常量:直接在类内部 private static final定义。
(三)代码格式
1.左小括号和字符之间不出现空格;同样右小括号和字符之间也不出现空格。if (a == b)2.if/for/while/switch/do等保留字与括号之间都必须加空格。3.采用4个空格缩进,禁止使用tab字符。在eclipse中,必须勾选insert spaces for tabs。4.注释的双斜线与注释内容之间有且仅有一个空格。5.单行字符数限制不超过120个,超出需要换行,换行时遵循如下原则:(1)第二行相对第一行缩进4个空格,从第三行开始,不再继续缩进(2)运算符与下文一起换行。(3)方法调用的点符号与下文一起换行。(4)方法调用时,多个参数,需要换行时, 在逗号后进行。(5)在括号前不要换行。(6)方法参数在定义和传入时,多个参数逗号后必须加空格   method("a", "b", "c")(7)没有必要增加若干空格使某一行的字符与上一行对应位置的字符对齐。
(四)OOP规约
1.所有重写的方法,必须加@Override注解
2.外包正在调用或者二方库依赖的接口,不允许修改方法签名,避免对接口调用方产生影响。接口过时必须加
@Deprecated注解,并清晰地说明采用的新接口或者新服务是什么。
3.Object的equals方法容易抛出指针异常,应该用常量或确定有值的对象来调用equals。"test".equals(object)
4.所有的相同类型的包装类对象之间的值比较,全部使用equals方法比较。
说明:对于Integer var=? 在-128至127范围内赋值,在Integer对象是在IntegerCache.cache产生,会复用已有
对象,这个区间内的Integer值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会
复用已有对象,这个一个大坑,推荐使用equals方法进行判断。
5.关于基本数据类型与包装数据类型的使用标准如下:
(1)所有的POJO类属性必须使用包装数据类型。
(2)PRC方法的返回值和参数必须使用包装数据类型。
(3)所有的局部变量使用基本数据类型。
6.定义DO/DTO/VO等POJO类时,不要设定任何属性默认值。
7.序列化类新增属性时,请不要修改serialVersionUTD字段,避免反序列失败,如果完全不兼容升级,避免
反序列话混乱,那么请修改seriaVersionUTD值。
8.构造方法里面进制加入任何业务逻辑,如果有初始化逻辑,请放在init方法中。
9.POJO类必须写toString方法。使用IDE的中工具:source>generate toString时,如果继承了另一个POJO类,
注意在前面加一下 super.toString
10.使用索引访问用String的split方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会有抛
IndexOutOfBountsException的风险。
String str = 'a,b,c, ,';
String[] ary = str.split(",");
//预期大于3,结果是3
System.out.println(ary.length);
11.当一个类有多个构造方法,或者多个同名方法,这些方法应该按顺序放置在一起。
12.类内方法定义顺序依次是:共有方法或保护方法 私有方法 getter/setter方法。
13.循环体内,字符串的连接方式,使用StringBuilder的append方法进行扩展。
14.final可以声明类、成员变量、方法、以及本地变量,下列情况使用final关键字
(1)不允许被继承的类,如String类
(2)不允许修改引用的域对象,如POJO类的域变量
(3)不允许呗重写的方法,如POJO类的setter方法。
(4)不允许运行过程中重新赋值的局部变量。
(5)避免上下文重复使用一个变量,使用final描述可以强制重新定义一个变量,方便更好的进行重构。
15.对象的clone方法默认是浅拷贝,若想实现深拷贝需要重写clone方法实现属性对象的拷贝。
16.类成员与方法访问控制从严
(1)如果不允许外部直接通过new来创建对象,那么构造方法必须是private
(2)工具类不允许有public或default构造方法
(3)类非static成员变量并且与子类共享,必须是protected
(4)类非static成员变量并且仅在本类使用,必须是private
(5)类static成员变量如果仅在本类使用,必须是private
(6)若是static成员变量,必须考虑是否为final
(7)类成员方法只供类内部调用,必须是private
(8)类成员方法只对继承类公开,那么限制为protected
说明:任何类、方法、参数、变量,严控访问范围。过于宽泛的访问范围,不利于模块解耦。
(五)集合处理
1.关于hashCode和equals的处理(1)只要重写equals,就必须重写hashCode
(2)因为Set存储的是不重复的对象,依据hashCode和equals进行判断,所以Set存储的对象必须重写这两个方法。
(3)如果自定义对象作为Map的值,那么必须重写hashCode和equals。
说明:String重写了hashCode和equals方法,所以我们可以非常愉快地使用String对象作为key来使用。
2.ArrayList的subList结果不可强转成ArrayList,否则会抛出ClassCastException异常
说明:subList返回的是ArrayList的内部类SubList,并不是ArrayList,而是ArrayList的一个视图,对于SubList
子列表的所有操作最终都会反映到原列表上。
3.在subList场景中,高度注意对元集合原元素个数的修改,会导致子列表的遍历、增加、删除运回产生
ConcurrentModificationException异常。
原创粉丝点击