阿里Java开发手册个人提炼总结版—— ——编程规约

引子      

      就算是转载吧,毕竟大部分内容来自阿里的Java开发手册,学习一下大公司成型的规范,对自己的代码肯定没有坏处就是了,一直在小公司工作,代码没有很好的规范起来,有时候自己会看的时候也会有点吃力,借着这个机会好好学习一下,哪怕为了以后自己检查问题方便一点也是好的。

       下面进入正题,编程规约主要针对日常编程的方方面面小细节进行详细说明,包括命名风格、常量定义、代码格式、OOP规约、集合处理、并发处理、控制语句、注释规约和其他九个方面

编程规约

 

(一)命名风格

1、代码中一切命名都不能以下划线或者美元符号开始或结束。

我:没犯过这类型错误

2、严禁使用拼音英文混合方式,不允许使用中文

我:犯过,爱用拼音,个人任务问题不大,只要方便读懂就可以,当然,要慎用自己床在的缩写

3、类名使用UpperCamelCase风格,以下例外:DO /BO /DTO /VO /AO /PO /UID等

我:首字母大写的驼峰风格,一直这样

4、方法名、参数名、成员变量、局部变量统一用lowerCamelCase风格

我:首字母小写驼峰风格

5、常量全部大写,需要用多个单词表述清楚地,单词之间用下划线分隔

我:一直这样

6、抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以要测试的类名开始,Test结尾

我:一直这样

7、类型与中括号相邻来表示数组

我:还是这样、、例如int[] string[] args...

8、POJO类中的布尔类型的变量,都不要加is前缀,否则部分框架解析会引起序列化错误。

我:使用过is前缀,当时未发现问题;在网上查看一下,会出现一个问题,就是在POJO类中,例如变量名是success,它的get方法是isxxx,这就是问题,如果变量名是isxxx的话,就出问题了,接收参数会得到相反的结果。

9、包名统一使用小写,点分隔符之间有且仅有一个自然语义的单词。包名统一使用单数形式。

我:即形如com.company.xxx的形式,常规操作都这样应该

10、杜绝不规范的缩写,避免望文不知义

我:这错误犯过,而且总犯,尤其在给变量起名字的时候经常自行想象缩写。

11、为了达到代码自解释的目标,任何自定义编程元素在命名时候,尽量采用完整的单词组合来表达含义

我:也就是避免int a 或者 string str这种形式出现,我总犯,但是一定要注意以后,不要怕麻烦,要表达清晰明确

12、模块、接口、类、方法使用了设计模式,在命名时需要体现出具体设计模式

我:没这个习惯,慢慢养

13、接口类总的方法和属性不要加任何修饰符号(包括public也不要用),保持代码的简洁性,并加上有效的Javadoc注释。尽量不要在接口里定义变量,一定要定义,那么该变量对所有实现类有效。

我:有时会加public,从没定义过变量

14、接口和实现类的命名有两套规则:

1)对于service和dao,基于soa的理念,暴露出来的服务一定是接口,内部实现类用Impl的后缀与接口区别

2)如果是形容能力的接口名称,取对应的形容词为接口名。例如:AbstractTranslator实现Translatable接口。

我:第二种不常用,第一种重新理解了一遍SOA理念,松耦合的黑盒子服务,(收藏:SOA概念解惑)

15、枚举类名带上Enum后缀,枚举成员名称需要大写,单词间用下划线隔开。

我:使用枚举非常少,收藏文章重新认识Java----Enum类作为参考

16、各个层命名规约:

A)Service/Dao层方法命名规约:

    1)获取单个对象的方法用get做前缀

    2)获取多个对象的方法用list做前缀,复数形式结尾

    3)获取统计值的方法用count做前缀

    4)插入的方法用save或insert做前缀

    5)删除的方法用remove或delete做前缀

    6)修改的方法用update做前缀

B)领域模型命名规约

    1)数据对象:xxxDO,xxx为数据库表名

    2)数据传输对象:xxxDTO,xxx为业务领域相关

    3)展示对象:xxxVO,xxx为网页名称

    4)POJO是这一类的总称

(二)常量定义

1、不允许任何魔法值(即未经预先定义的常量)直接出现在代码中

我:经常出现这种操作,尤其是使用字符串比较方法时候,特别用于直接用“xxx”.equals(xxx)

2、给long型赋值,必须大写,避免和1混淆。例如:Long a = 1L而不能1l,容易看错

我:我。。。我爱用小写,这么看确实不舒服,改改改

3、不要使用一个常量类维护所有常量,要按照常量功能进行归类,分开维护。例如:CacheConsts,ConfigContst等

我:还得改,习惯于直接一个类包括一切。。。

 

4、常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包 内共享常量、类内共享常量

1)跨应用共享常量:放置在二方库中,通常是 client.jar 中的 constant 目录下

2)应用内共享常量:放置在一方库的 modules 中的 constant 目录下

3)子工程内部共享常量:即在当前子工程的 constant 目录下

4)包内共享常量:即在当前包下单独的 constant 目录下

5)类内共享常量:直接在类内部 private static final 定义

我:慢慢习惯。。

5、如果变量值仅在一个范围内变化用 Enum 类。如果还带有名称之外的延伸属性,必须 使用 Enum 类,下面正例中的数字就是延伸信息,表示一年中的第几个季节。

public enum SeasonEnum{
   SPRING(1),SUMMER(2),AUTUMN(3),WINTER(4);

   private int seq;

   SeasonEnum(int seq){
     this.seq=seq;
   }
}

(三)代码规约

1、大括号的使用约定。如果是大括号内为空,则简洁地写成{}即可,不需要换行;如果是非空代码块则:

1) 左大括号前不换行。

2) 左大括号后换行。

3) 右大括号前换行。

4) 右大括号后还有 else等代码则不换行;表示终止右大括号后必须换行。

2、左括号和后一个字符之间不出现空格;同样,右括号和前一个字符之间也不出现空格。

3、if/for/while/switch/do等保留字与左右括号之间都必须加空格。

4、任何运算符左右必须加一个空格。

说明:运算符包括赋值运算符=、逻辑运算符&&、加减乘除符号、三目运行符等。

5、代码块缩进 4个空格,如果使用 tab缩进,请设置成 1个 tab为 4个空格。

我:以上五点基本都在遵守,大多数编译器的格式也是这样子的

6、单行字符数限制不超过 120个,超出需要换行,换行时,遵循如下原则:

1) 换行时相对上一行缩进 4个空格。

2) 运算符与下文一起换行。

3) 方法调用的点符号与下文一起换行。

4) 在多个参数超长,逗号后进行换行。

5) 在括号前不要换行,见反例。

我:此类情况极少出现

7、方法参数在定义和传入时,多个参数逗号后边必须加空格。

正例:下例中实参的"a",后边必须要有一个空格。method("a", "b", "c");

我:没毛病,一直这样

8、没有必要增加若干空格来使某一行的字符与上一行的相应字符对齐。

正例:

int a =3;

long b = 4L;

float c = 5F;

StringBuffer sb = new StringBuffer();

说明:增加 sb这个变量,如果需要对齐,则给 a、b、c都要增加几个空格,在变量比较多的情况下,是一种累赘的事情。

我:是的,从没有干过这种事,因为没有强迫症

9、IDE的 text file encoding设置为 UTF-8;IDE中文件的换行符使用 Unix格式,不要使用 windows格式。

我:这就去改

10、方法体内的执行语句组、变量的定义语句组、不同的业务逻辑之间或者不同的语义之间插入一个空行。相同业务逻辑和语义之间不需要插入空行。

说明:没有必要插入多行空格进行隔开。

我:是的,不同的业务逻辑或者语义,通常会用空格加上若干注释隔开,便于以后阅读

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值