阿⾥Java规范if不让⽤括号_阿⾥Java编程规范学习笔记编程规范
命名规约
1.包名,统⼀使⽤⼩写,单数形式,点分隔符之间仅有⼀个⾃然语义的英⽂单词。但是类名有复数含义,可以使⽤复数单词。
2.接⼝类,⽅法和属性不要加任何修饰符,并加上有效的javadoc注释。
3.各层命名规范:
A)Service/DAO层⽅法名规约
1) 获取单个对象的⽅法⽤get做前缀。
2) 获取多个对象的⽅法⽤list做前缀。
3) 获取统计值的⽅法⽤count做前缀。
4) 插⼊的⽅法⽤save(推荐)或insert做前缀。
5) 删除的⽅法⽤remove(推荐)或delete做前缀。时间正则表达式java
6) 修改的⽅法⽤update做前缀。
B)领域模型命名规约
1) 数据对象:xxxDO,x xx即为数据表名。
2) 数据传输对象:xxxDTO,xxx为业务领域相关的名称。
3) 展⽰对象:xxxVO,xxx⼀般为⽹页名称。
4) POJO是DO/DTO/BO/VO的统称,禁⽌命名成xxxPOJO。
常量定义
1.不允许任何魔法值(即未经定义的常量)直接出现在代码中。
2.long和Long初始赋值时,必须使⽤⼤写的L,不能是⼩写的l。
3.不要使⽤常量类维护所有的常量,应该按常量功能进⾏归类,类名以Consts结尾
4.常量的复⽤层次有五层:跨应⽤共享常量、应⽤内共享常量、⼦⼯程内共享常量、包内共享常量、类内共享常量 。
1)跨应⽤共享常量:放置在⼆⽅库中,通常是client.jar中的const⽬录下。
2)应⽤内共享常量:放置在⼀⽅库的modules中的const⽬录下。
3)⼦⼯程内共享常量:即在当前⼦⼯程的const⽬录下。
4)包内共享常量:即在当前包下单独的const⽬录下。
5)类内共享常量:直接在类内部private static final定义。
格式规约
1.单⾏字数不超过120个,超出需要换⾏,换⾏时,遵循如下原则:
1)换⾏时相对上⼀⾏缩进4个空格。
2)运算符与下⽂⼀起换⾏
3)⽅法调⽤的点符号与下⽂⼀起换⾏
4)在多个参数超长,逗号后⾯进⾏换⾏。
5)括号前⾯不要换⾏。
2. ⽅法体内的执⾏语句组、变量的语义定义组、不同的业务逻辑之间或者不同的语义之间插⼊⼀个空⾏。
OOP规约
1.对外暴露的接⼝签名,原则上不允许修改⽅法签名,避免对接⼝调⽤⽅产⽣影响。接⼝过时必须加@Deprecated注解,并清晰的说明采⽤的新接⼝或者新服务是什么。
2.不能使⽤过时的类和⽅法。
3.Object的equals⽅法容易抛空指针异常,应使⽤常量或确定有值的对象来调⽤equals。
说明:推荐使⽤java.util.Objects.equals(a,b) (JDK7引⼊的⼯具类)
4. 关于基本数据类型与包装数据类型的使⽤标准如下:
1)所有的POJO类属性必须使⽤包装数据类型。
2)RPC⽅法的返回值和参数必须使⽤包装数据类型。
3)所有的局部变量推荐使⽤基本数据类型。
4)在定义DO\DTO\VO等POJO时,不要设定任何属性默认值。
5.POJO类必须写重写toString()⽅法 。
6.类内⽅法的定义顺序:公有⽅法或者保护⽅法>私有⽅法>getter&setter⽅法。
7.循环体内,字符串的联接⽅式,使⽤StringBuilder的append⽅法进⾏扩展。
8.final可以提⾼程序响应效率,声明成final的情况:
1)不需要重新赋值的变量,包括类属性,局部变量。
2)对象参数前加final,表⽰不允许修改引⽤的指向。
3)类⽅法确定不允许被重写。
9.类成员与⽅法访问控制从严:
1)如果不允许外部直接通过new来访问对象,那么构造⽅法必须是private。
2)⼯具类不允许有public和default构造⽅法。
3)类⾮static成员变量并且与⼦类共享,必须是protected。
4)类⾮static成员变量并且仅在本类使⽤,必须是private。
5)类static成员变量如果仅在本类使⽤,必须是private。
6)若是static成员变量,必须考虑是否为final。
7)类成员⽅法只供类内部调⽤,必须是private。
8)类成员⽅法只对继承类公开,那么限制为protected。
集合处理
1.Map/Set的key为⾃定义对象时,必须重写hashCode和equals。
2.使⽤集合转数组的⽅法,必须使⽤集合的toArray(T[] array),传⼊的是类型⼤⼩完全⼀样的数组。
3.不要在foreach循环⾥进⾏集合元素的remove/add 操作,若要请使⽤Iterator⽅式。
4.集合初始化时,尽量指定集合初始值⼤⼩。
5. 利⽤Set元素唯⼀的特性,可以快速对另⼀个集合进⾏去重操作,避免使⽤List的contains⽅法进⾏遍历去重操作。
并发处理
1.线程资源必须通过线程池提供,不允许在应⽤中⾃⾏显⽰创建线程。
2.⾼并发时应该去考虑锁的性能损耗,能⽤⽆锁数据结构就不要⽤锁;能锁区块,就不要锁整个⽅法体;能⽤对象锁,就不要锁类 。
3.对多个资源、数据库表、对象同时加锁时。需要保持⼀致的加锁顺序,否则可能会造成死锁。
4.并发修改同⼀记录时,避免更新丢失,要么在应⽤层加锁,要么在缓存加锁,要么在数据库层使⽤乐观锁,使⽤version作为更新依据,乐观锁的重试次数不得⼩于3次。
5.线程池不允许使⽤Executors去创建,⽽是通过ThreadPoolExecutor去创建。
控制语句
1.在⼀个switch内必须要有default快,即使什么都没做。
2.在if/else/for/while/do语句中必须使⽤⼤括号,即使只有⼀⾏代码。
3.推荐尽量少⽤else,if-else可以⽤if return来代替,如果使⽤if-else if-else来表达,不允许超过3层。
4.不要在条件判断中执⾏复杂的语句,以提⾼可读性。
5. ⽅法中需要进⾏参数校验的场景:
1)调⽤频次低的⽅法。
2)执⾏时间开销很⼤的⽅法。
3)需要极⾼稳定性和可⽤性的⽅法。
4)对外提供的开放接⼝,不管是RPC/API/HTTP接⼝。
6. ⽅法中不需要参数校验的场景:
1)极有可能被循环调⽤的⽅法,不建议对参数进⾏校验。
2)底层的⽅法调⽤。如dao层不进⾏校验 。
3)private⽅法,确认参数不会有问题。
注释规约
1.类、类属性、类⽅法的注释必须使⽤javadoc规范,使⽤/**内容**/格式,不得使⽤//内容 ⽅式。
2. 所有的抽象⽅法(包括接⼝中的⽅法)必须要⽤javadoc注释、除了返回值、参数、异常说明外,还应该指出该⽅法做什么事情,实现什么功能。
3.⽅法内部进⾏单⾏注释使⽤//,多⾏注释使⽤/**/
4.所有的枚举类型字段必须要有注释,说明每个数据项的⽤途。
5. 代码修改的同时,注释也要跟着修改。
6.注释后的代码要配上说明。
其它
1.在使⽤正则表达式时,利⽤好其预编译功能,可以有效加快正则匹配速度。
2.获取当前毫秒数:System.currentTimeMills();如果想获取更精确的纳秒级时间,使⽤System.nanaoTime()。
3.对于"明确停⽌使⽤的代码和配置",要坚决从程序中清理出去。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。