阿里巴巴Java开发手册(开发规范)——编程规约笔记

2.常量规约

【推荐】如果变量值仅在一个范围内变化用Enum类。

如果还带有名称之外的延伸属性,必须使用Enum类,

下面正例中的数字就是延伸信息,表示星期几。

正例:

public Enum{ MONDAY(1), TUESDAY(2), WEDNESDAY(3), THURSDAY(4), FRIDAY(5), SATURDAY(6), SUNDAY(7);}

3.格式规约

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

4.OOP规约

【强制】对外暴露的接口签名,原则上不允许修改方法签名,避免对接口调用方产生影响。接口过时必须加@Deprecated注解,并清晰地说明采用的新接口或者新服务是什么。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px SimSun; min-height: 14.0px }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.5px SimSun }
span.s1 { font: 10.5px Courier }
span.s2 { font: 11.5px Courier }

【强制】所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较。 说明:对于Integer var=?在-128至127之间的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用equals方法进行判断。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px SimSun; min-height: 14.0px }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.5px SimSun }
span.s1 { font: 11.5px Courier }
span.s2 { font: 10.5px SimSun }
span.s3 { font: 10.5px Courier }

【强制】关于基本数据类型与包装数据类型的使用标准如下: 1) 所有的POJO类属性必须使用包装数据类型。 2) RPC方法的返回值和参数必须使用包装数据类型。 3) 所有的局部变量【推荐】使用基本数据类型。 说明:POJO类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值,任何NPE问题,或者入库检查,都由使用者来保证。 正例:数据库的查询结果可能是null,因为自动拆箱,用基本数据类型接收有NPE风险。 反例:比如显示成交总额涨跌情况,即正负x%,x为基本数据类型,调用的RPC服务,调用不成功时,返回的是默认值,页面显示:0%,这是不合理的,应该显示成中划线-。所以包装数据类型的null值,能够表示额外的信息,如:远程调用失败,异常退出。

【强制】定义DO/DTO/VO等POJO类时,不要设定任何属性默认值。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px SimSun; min-height: 14.0px }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.5px SimSun }
span.s1 { font: 10.5px Courier }
span.s2 { font: 10.5px SimSun }

【强制】序列化类新增属性时,请不要修改serialVersionUID字段,避免反序列失败;如果完全不兼容升级,避免反序列化混乱,那么请修改serialVersionUID值。 说明:注意serialVersionUID不一致会抛出序列化运行时异常。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px SimSun; min-height: 14.0px }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.5px SimSun }
span.s1 { font: 10.5px Courier }

构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在init方法中。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px SimSun; min-height: 14.0px }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.5px SimSun }
span.s1 { font: 10.5px Courier }
span.s2 { font: 11.5px Courier }

【强制】POJO类必须写toString方法。使用IDE的中工具:source> generate toString时,如果继承了另一个POJO类,注意在前面加一下super.toString。 说明:在方法执行抛出异常时,可以直接调用POJO的toString()方法打印其属性值,便于排查问题。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px SimSun; min-height: 14.0px }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.5px SimSun }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Courier }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px SimSun }
span.s1 { font: 10.5px Courier }
span.s2 { font: 9.0px Courier }

【推荐】使用索引访问用String的split方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会有抛IndexOutOfBoundsException的风险。

说明:

String str = "a,b,c,,";

String[] ary = str.split(",");

//预期大于3,结果是3

System.out.println(ary.length);

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Courier; min-height: 14.0px }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.5px SimSun }
span.s1 { font: 10.5px Courier }
span.s2 { font: 11.5px Courier }

setter方法中,参数名称与类成员变量名称一致,this.成员名=参数名。在getter/setter方法中,尽量不要增加业务逻辑,增加排查问题的难度。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px SimSun; min-height: 14.0px }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.5px SimSun }
span.s1 { font: 10.5px Courier }
span.s2 { font: 11.5px Courier }
span.s3 { font: 10.5px SimSun }

【推荐】final可提高程序响应效率,声明成final的情况: 1) 不需要重新赋值的变量,包括类属性、局部变量。 2) 对象参数前加final,表示不允许修改引用的指向。 3) 类方法确定不允许被重写。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px SimSun; min-height: 14.0px }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.5px SimSun }
span.s1 { font: 10.5px Courier }

【推荐】慎用Object的clone方法来拷贝对象。 说明:对象的clone方法默认是浅拷贝,若想实现深拷贝需要重写clone方法实现属性对象的拷贝。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px SimSun; min-height: 14.0px }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.5px SimSun }
span.s1 { font: 11.5px Courier }
span.s2 { font: 10.5px SimSun }
span.s3 { font: 10.5px Courier }

【推荐】类成员与方法访问控制从严: 1) 如果不允许外部直接通过new来创建对象,那么构造方法必须是private。 2) 工具类不允许有public或default构造方法。 3) 类非static成员变量并且与子类共享,必须是protected。 4) 类非static成员变量并且仅在本类使用,必须是private。 5) 类static成员变量如果仅在本类使用,必须是private。 6) 若是static成员变量,必须考虑是否为final。 7) 类成员方法只供类内部调用,必须是private。 8) 类成员方法只对继承类公开,那么限制为protected。 说明:任何类、方法、参数、变量,严控访问范围。过宽泛的访问范围,不利于模块解耦。思考:如果是一个private的方法,想删除就删除,可是一个public的Service方法,或者一个public的成员变量,删除一下,不得手心冒点汗吗?变量像自己的小孩,尽量在自己的视线内,变量作用域太大,如果无限制的到处跑,那么你会担心的。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px SimSun; min-height: 14.0px }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.5px Courier }
span.s1 { font: 11.5px SimSun }
span.s2 { font: 11.5px Courier }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Courier; min-height: 14.0px }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.5px Courier }
span.s1 { font: 11.5px SimSun }
span.s2 { font: 11.5px Courier }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px SimSun; min-height: 14.0px }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.5px SimSun }
span.s1 { font: 10.5px Courier }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px SimSun; min-height: 14.0px }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.5px SimSun }
span.s1 { font: 10.5px Courier }
span.s2 { font: 11.5px Courier }

时间: 2024-10-06 04:44:50

阿里巴巴Java开发手册(开发规范)——编程规约笔记的相关文章

alibaba-Java开发手册心得-一编程规约-4oop(面向对象编程)规约

1. [强制]避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可. 2. [强制]所有的覆写方法,必须加@Override注解. 说明:getObject()与get0bject()的问题.一个是字母的O,一个是数字的0,加@Override可以准确判断是否覆盖成功.另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错. 3. [强制]相同参数类型,相同业务含义,才可以使用Java的可变参数,避免使用Object. 说明:可变参数必须放置

alibaba-Java开发手册心得-一编程规约-6并发处理

1. [强制]获取单例对象需要保证线程安全,其中的方法也要保证线程安全. 说明:资源驱动类.工具类.单例工厂类都需要注意. 2. [强制]创建线程或线程池时请指定有意义的线程名称,方便出错时回溯. 3. [强制]线程资源必须通过线程池提供,不允许在应用中自行显式创建线程. 说明:使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资源不足的问题.如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者"过度切换"的问题.

alibaba-Java开发手册心得-一编程规约-1命名风格

1.[强制]不能以 _ $开始 或结束 2.[强制]严禁使用 拼音和英文混合,或中文.即使是纯拼音也要避免使用.除非是国际通用的例如taobao youku 等. 3.[强制]类名 必须遵从驼峰形式UpperCamelCase,除了DO/BO/DTO/VO/AO. 正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion 反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPro

阿里Java开发手冊之编程规约

对于程序猿来说,编程规范能够养成良好的编程习惯,提高代码质量,减少沟通成本.就在2月9号,阿里出了一份Java开发手冊(正式版),分为编程规约.异常日志.MySQL规约,project规约.安全规约五个章节. 这里我依据阿里的编程规约,重点记录(黑色加粗部分)自己还未做好的一些规范,同一时候方便查阅. 编程规约 一.命名规约 [强制]代码中的命名均不能下面划线或美元符号開始.也不能下面划线或美元符号结束. 反例: _name / __name / $Object / name_ / name$

《阿里巴巴Java工作手册》学习笔记

最近浏览了一下阿里巴巴的Java开发手册,感觉内容确实非常的赞,发现了不少自己在编程中的误区,因此决定通过成文牢固掌握,文中将选取个人认为比较重要的部分进行描述与分析."愿站在巨人的肩膀上,码出高效,码出质量". 概述 手册中内容很多,包括编码规约.工程结构.MySQL数据库.异常日志.安全规约.单元测试等6大部分.其中工程结构部分在整体上对项目进行了把控,编码规约和MySQL设计规约中有非常多的"最佳实践",个人认为是最为有价值的部分.次重点安全规约很符合互联网场

阿里Java开发手册学习 3 MYSQL规约

建表规约 1.表达是与否概念的字段,必须使用is_XXX的方式命名,数据类型是 unsigned tinyint (1表示是,0表示否). 2.表名不使用复数名词. 3.禁用保留字. 4.小数类型为decimal,禁止使用float和double. 5.表的命名最好是加上"业务名词_表的作用" . 6.修改字段时要及时更新字段注释. 7.字段允许适当冗余,以提高性能. 8.单表行数超过500万行或者单表超过2G时才考虑分库分表. 9.合适的字符存储长度,不但节约数据库表空间.节约索引存

阿里Java开发手册之编程规约

阿里Java开发手册之编程规约 对于程序员来说,编程规范可以养成良好的编程习惯,提高代码质量,降低沟通成本.就在2月9号,阿里出了一份Java开发手册(正式版),分为编程规约,异常日志,MySQL规约,工程规约,安全规约五个章节.这里我根据阿里的编程规约,重点记录(黑色加粗部分)自己还未做好的一些规范,同时方便查阅. ++阿里Java开发手册下载地址++ 编程规约 一.命名规约 [强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反例: _name / __name

阿里巴巴 Java 开发手册 1.4.0

一.编程规约(一) 命名风格1. [强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.反例: _name / __name / $name / name_ / name$ / name__2. [强制]代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式.说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义.注意,即使纯拼音命名方式也要避免采用.正例: alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同

读阿里巴巴Java开发手册v1.2.0之编程规约有感【架构篇】

 不为过去蹉跎,改变当下. 为什么开篇就送这么一句话给大家,我相信很多处于1-3年码龄的哥们儿们,在平时的编码历程中编码的个性可能是多彩的,每个人都有每个人特定的风格,但是我们现在这么随意写,以后这么随意写,好没问题,但是等你离开这个公司了或者是去开发别的项目了,再等别人过来接手维护你一手写出来的这段个性十足的代码时,那么你的右眼皮时不时地就会跳,因果我就不说了~~ 所以我建议看到这篇博文的朋友们,或许你稍微改变一下你的编码风格,遵从一套好的编码规约对己对人都是有好处的.可能朋友的公司也有专门的