阿里巴巴 《Java 开发者手册》也是一份防坑指南
我是风筝,大众号「古时的风筝」,一个不只要技能的技能大众号,一个在程序圈混迹多年,主业 Java,别的 Python、React 也玩儿的 6 的斜杠开发者。
Spring Cloud 系列文章现已完成,能够到l 9 ] o : } { 我的github 上查看系列完好内容。也能够在大众号内回复「pdf」获取我精心制作的 pdf 版完好教程。
4月22日,阿里巴巴发布了泰山版《Java 开发O E 手册》,曾经认为终极版就真的是终极版了,没想到仍是想的太简单了,6 ; s Q继终极版之后又发布了详尽版、华山版,这不,泰山版又来了。想想也对,职业一直在发展,Jn x m r g # !DK 也一直在更新,怎样可能有终极版。

自从2017年阿里发O w . ]布终结版发布以来,我就把这个手册作为开发标准运用,放在电脑中最显眼的当地,时不时就翻出来看一看,而且在团队中推行,还趁便安利给了一些朋友。每次有新版别发布都第一时$ 9 p d T h 6间拿下来再重新读一遍。
本次泰山版发布,对比上一版别有如下几个更新:
-
发布过错码一致解决方案。 -
新增 34条新规约,比方,日期时间的闰年、闰– + 8 R U !月问题,三目运算的自动拆箱,SQL 查询的表别名限定,Collectors 类的 toMap()办法运用注意等。 -
修正描述 90处,比方,堵塞等候锁、建表的小数类型: : U N等。 -
完善若干处示例,比方,ISNULL 的示例等 。
为什么要经常拿出来读一读呢?

手册触及从项目规划到编码、布置的各个方面。可是关于开发者个人@ L r l a来说,有些方面其实不常触摸,比方并发操控有很多人触摸的机会有限。再比方反常界说、MySQL 管理,可能是项目开端的时分被中心开发人员或许. # K架构师一致定制好了,有些同学也就直接拿u j J来主义了,也不关心详细的规划原理和实现细节。
手册也不长,这一版正文只要 57 页,读一遍也花不了多8 T H长时间。其间有些方面是我V R +们平常也经常提到的,比方指令风% * B格、常量界说等,也有一些M A % J R方面可能平常就没那么注意了,比方注释规约,注释怎样写,r g ( Y写在哪里,什么格局。不夸大的说,很多时分,能写注释的都现已很不错了, 更不要说把注释写清楚,甚至有很多人底子就不怎样写注释,觉得这是浪费时间。
这个手册是阿里巴巴多年开发经历的结晶,除了上面5 X 7 4 s : ^ ;提到的命名、注释等进步代码可读性、易读性的规约,还包含了正确的建表、杰出的工程结构、杰出的反常处理、安全操控,还有一些平常常用 JDK 功用的防坑指南。
命名风格、常量界说、代码格局
这几个根本上写过几年代码的都会有一套差不多的标准,根本上和阿里, v c V I H巴巴开发者手册相差无几。
OOP 规约
6.【强制】Object的equals办法容易抛空指针反常,应运用常量或确认有值的目标来调用equalp Z w %s。
正例:”test”.equals(objec( s w v m – I –t);
反例:objl 5 y { Z 2 x Rect.equals(“test”);
阐明:引荐运用 java.util.Objects#equals(JDK7 引进的工具类)。
反例中的 object 是一个变量,而且这个变量为 null,就会抛出反常。引荐运用 Objects.equals(s1, s2} s } P M l h)。
8. 【强制】任何钱银金额,均以最小钱银单位且整型类型来进行存储。
比方说人民币的最小单位是w R # B H分,那假定一个产品的价格是1元钱,那就存到数据库的 price 字段,字段类型是 int 或许 bigint,值为 100,单位^ v @ } N V e ^是分,也就是100分。
我就在这个问题上入过坑,几年前一个体系中的F ; E x h & Z & e价格字段用的是浮点数,单位仍是元,后面在价格核算上很是费事,而且浮点数的核算并不是彻底准确的,尤其是触及到小数位的时分。最后仍是把字段调成了 int% U | 类型,代码上触及到价格的当地都重构z n 6了。
所以,后来; [ C + N当+ [ ?我看到手册中的这条规约的时分,有种相见恨晚的感觉。我. I s |用了沉痛的经历才换来这个教训,如果早点看到呢,岂不是省了很2 G f H多事。
9. 【强制】浮点数之间的等值判断,根本数据类型不能用==来比较,包装数据类型不能用 equals 来判断。
反例:
floata=1.0f-0.9f;
floatb=0.9f-0.8f;
if(a==b){
//预期进入此代码C d 7 ] ) t # X S快,执行其它事务逻辑//但事实上a==b的成果为false
}
Floatx=Float.valueOf(a);
Floaty=Float.valueOf(b);
if(x.equals(y)){
//预期进入此代码快,执行其它事务逻辑
//但事实上e% } Oquals的成果为false
}
没写过浮点数核算之前,觉得这不就是数学核算吗,核算机最高出来不就是为了干这个y y 4 9 – 7 ~ N ,的吗。直到触摸了浮点数核算才发现和幻想的彻底不一样,就像上面的反例X p w _ U B , +那样,原因是核算机采用二进制,没办法彻底准确G C x V L ! ^ v !的表明十进制,有兴趣的同学能够搜一搜,了解一下背面原理。
正确的做法是用高精度的 BigDecimal,它的意图就是用来做浮点数做不来的高精度核算的。
日期格局
有好多. 7 n同学关于日期的处理都: n V O不是很熟悉,经常良久不必,用到了就去网上查,其实我也2 ) ~ C N N b不常用,要让我现在手写一个日期处理的办法C . F J *也得查 API,为此专门写了一个日期处理工具类。可是注意要及时晋级,比方 JDK 8 之后出的 LocalDateTime 就能够替换之前的w G 1 f 9 2 M F c Date 了。
手册中还专门提到了**【强制】不允许在程序任何当地中运用:1)java.sql.Date2)java.sql.Time3) java.sql.Timestamp**,赶忙翻1 1 i * g 翻你的代码中是不是还在用这三个类型,反正我现已在e / k # d %用 LocalDateTime。
调集处理
调集使我们开发中运E 5 . Q用频率非常高的数据结构,主张每一条_ & 2 m P m k R $都仔细阅读,然后应用到我们的项目中。这B [ @哪里是开发手册,这是在告知我们+ W b怎么正确的运用Java 调集。
并发处理
怎么正确的运用线程池、SimpleDateFormat 不是线程安全的、正确的运用 ThreadLocal。每一条( M ( _背面都是经历教训。
反常处理
try-catch 怎么运用、同一模块怎e * # { o I + 3么处理反常、不同服务怎么处理反常等等。
MySQL
怎么建表、何时分表,怎么命名表名、字段名,合适的挑选字段类型,怎么建立z w & ( A * ]索引、杰出的 SQL 句子,ORM 映射,每一条都能深挖下去。
工程结构
项目标准的分层结构是怎样样a w % e ; T z的,依靠库的管理方式,服务器的重点Z , 2 9 6 J调优目标等等。
规划规约
从架构师的视点标准一个项目文档编写、规划进程等等。
过错码
过错码用来友好的反响逻辑问题或许体系过错。每个渠道都应该有且仅有一份过错码,不能多也不能少。在手册最后还公布了一份完好的过错9 u 1 N &码列表。
能一次性把手册读理解的,那肯定是高手了,大多数人可能对其间的一部分规约不太理解。但其实这些都是根底的内容,所以说,看那些云山雾罩的面试宝典之前,先把这个r z p手册彻底搞理解,那对你的编程水平也会有很大进步。
阿里巴巴编码标准 IDa I Q i c S ` MEA 插件
阿里巴巴还出了一个开发规约的 IDEA 插件,配合开发手册就完美了。能够在 IDEA 插件管理界面搜索”AlibabaX y i 9 i 9 JavaF 5 = E d Code GuidelinesX G n N“进行安装。
之后在 IDEA 的 tools 菜单下能够看到这个插件,有动态敞开或许关闭,还能够切换言语。

敞开之后,当我们在代码里写了违背规约的t T H y M 8 T w代码时,就会给出提示,比方我在代码里用 ==
比较两个 IntO ` & M ) Aeger,就会在 ==
下面呈j b w c N U现正告提示,而且告知你正确的姿势是什么。

手册下载
没有下载的同学赶忙下载下来读两遍吧。
官方下载地址,需要登录阿里云S u ( 6。
developer.aliyun.com/topic/java2…
没有阿里云的同学,能够 直接点击下载
我是风筝,大众号「古时的风筝」,一个在程序圈混迹多年,主业 Java,别的 Python、React 也玩儿的很 6 的斜杠开发者。能够在大众w X ^ 6 } a x号中加我老友,进群里小伙伴交流学习] 3 O O q c 5 H,好多大厂的同学也在群内呦。
技能交流还能够加群或许直接加我微信。
