阿里巴巴泰山版《Java 开发者手册》,也是一份防坑指南
我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python、React 也玩儿的 6 的斜杠开发者。
Spring Cloud 系列文章已经完成,可以到 我的github 上查看系列完整内容。也可以在公众号内回复「pdf」获取我精心制作的 pdf 版完整教程。
4月22日,阿里巴巴发布了泰山版《Java 开发手册》,以前以为终极版就真的是终极版了,没想到还是想的太简单了,继终极版之后又发布了详尽版、华山版,这不,泰山版又来了。想想也对,行业一直在发展,JDK 也一直在更新,怎么可能有终极版。

自从2017年阿里发布终结版发布以来,我就把这个手册当做开发规范使用,放在电脑中最显眼的地方,时不时就翻出来看一看,并且在团队中推广,还顺便安利给了一些朋友。每次有新版本发布都第一时间拿下来再重新读一遍。
本次泰山版发布,对比上一版本有如下几个更新:
- 发布错误码统一解决方案。
- 新增 34条新规约,比如,日期时间的闰年、闰月问题,三目运算的自动拆箱,SQL 查询的表别名限定,Collectors 类的 toMap()方法使用注意等。
- 修改描述 90处,比如,阻塞等待锁、建表的小数类型等。
- 完善若干处示例,比如,ISNULL 的示例等 。
为什么要经常拿出来读一读呢?

手册涉及从项目设计到编码、部署的各个方面。但是对于开发者个人来说,有些方面其实不常接触,比如并发控制有很多人接触的机会有限。再比如异常定义、MySQL 管理,可能是项目开始的时候被核心开发人员或者架构师统一定制好了,有些同学也就直接拿来主义了,也不关心具体的设计原理和实现细节。
手册也不长,这一版正文只有 57 页,读一遍也花不了多长时间。其中有些方面是我们平时也经常说到的,比如命令风格、常量定义等,也有一些方面可能平时就没那么注意了,比如注释规约,注释怎么写,写在哪里,什么格式。不夸张的说,很多时候,能写注释的都已经很不错了, 更不要说把注释写清楚,甚至有很多人根本就不怎么写注释,觉得这是浪费时间。
这个手册是阿里巴巴多年开发经验的结晶,除了上面说到的命名、注释等提升代码可读性、易读性的规约,还包括了正确的建表、良好的工程结构、良好的异常处理、安全控制,还有一些平时常用 JDK 功能的防坑指南。
命名风格、常量定义、代码格式
这几个基本上写过几年代码的都会有一套差不多的规范,基本上和阿里巴巴开发者手册相差无几。
OOP 规约
6.【强制】Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。
正例:"test".equals(object);
反例:object.equals("test");
说明:推荐使用 java.util.Objects#equals(JDK7 引入的工具类)。
反例中的 object 是一个变量,并且这个变量为 null,就会抛出异常。推荐使用 Objects.equals(s1, s2)。
8. 【强制】任何货币金额,均以最小货币单位且整型类型来进行存储。
比如说人民币的最小单位是分,那假设一个商品的价格是1元钱,那就存到数据库的 price 字段,字段类型是 int 或者 bigint,值为 100,单位是分,也就是100分。
我就在这个问题上入过坑,几年前一个系统中的价格字段用的是浮点数,单位还是元,后面在价格计算上很是麻烦,而且浮点数的计算并不是完全准确的,尤其是涉及到小数位的时候。最后还是把字段调成了 int 类型,代码上涉及到价格的地方都重构了。
所以,后来当我看到手册中的这条规约的时候,有种相见恨晚的感觉。我用了惨痛的经验才换来这个教训,如果早点看到呢,岂不是省了很多事。
9. 【强制】浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用 equals 来判断。
反例:
float a = 1.0f - 0.9f;
float b = 0.9f - 0.8f;
if (a == b) {
// 预期进入此代码快,执行其它业务逻辑 // 但事实上 a==b 的结果为 false
}
Float x = Float.valueOf(a);
Float y = Float.valueOf(b);
if (x.equals(y)) {
// 预期进入此代码快,执行其它业务逻辑
// 但事实上 equals 的结果为 false
}
没写过浮点数计算之前,觉得这不就是数学计算吗,计算机最高出来不就是为了干这个的吗。直到接触了浮点数计算才发现和想象的完全不一样,就像上面的反例那样,原因是计算机采用二进制,没办法完全精确的表示十进制,有兴趣的同学可以搜一搜,了解一下背后原理。
正确的做法是用高精度的 BigDecimal,它的目的就是用来做浮点数做不来的高精度计算的。
日期格式
有好多同学对于日期的处理都不是很熟悉,经常好久不用,用到了就去网上查,其实我也不常用,要让我现在手写一个日期处理的方法也得查 API,为此专门写了一个日期处理工具类。但是注意要及时升级,比如 JDK 8 之后出的 LocalDateTime 就可以替换之前的 Date 了。
手册中还专门提到了【强制】不允许在程序任何地方中使用:1)java.sql.Date2)java.sql.Time3) java.sql.Timestamp,赶紧翻翻你的代码中是不是还在用这三个类型,反正我已经在用 LocalDateTime。
集合处理
集合使我们开发中使用频率非常高的数据结构,建议每一条都仔细阅读,然后应用到我们的项目中。这哪里是开发手册,这是在告诉我们如何正确的使用Java 集合。
并发处理
如何正确的使用线程池、SimpleDateFormat 不是线程安全的、正确的使用 ThreadLocal。每一条背后都是经验教训。
异常处理
try-catch 如何使用、同一模块如何处理异常、不同服务如何处理异常等等。
MySQL
如何建表、何时分表,如何命名表名、字段名,合适的选择字段类型,如何建立索引、良好的 SQL 语句,ORM 映射,每一条都能深挖下去。
工程结构
项目标准的分层结构是怎么样的,依赖库的管理方式,服务器的重点调优指标等等。
设计规约
从架构师的角度规范一个项目文档编写、设计过程等等。
错误码
错误码用来友好的反应逻辑问题或者系统错误。每个平台都应该有且仅有一份错误码,不能多也不能少。在手册最后还公布了一份完整的错误码列表。
能一次性把手册读明白的,那绝对是高手了,大多数人可能对其中的一部分规约不太理解。但其实这些都是基础的内容,所以说,看那些云山雾罩的面试宝典之前,先把这个手册完全搞明白,那对你的编程水平也会有很大提高。
阿里巴巴编码规范 IDEA 插件
阿里巴巴还出了一个开发规约的 IDEA 插件,配合开发手册就完美了。可以在 IDEA 插件管理界面搜索"Alibaba Java Code Guidelines"进行安装。


之后在 IDEA 的 tools 菜单下可以看到这个插件,有动态开启或者关闭,还可以切换语言。

开启之后,当我们在代码里写了违反规约的代码时,就会给出提示,比如我在代码里用 ==比较两个 Integer,就会在 ==下面出现警告提示,并且告诉你正确的姿势是什么。

手册下载
没有下载的同学赶紧下载下来读两遍吧。
官方下载地址,需要登录阿里云。
https://developer.aliyun.com/topic/java2020
没有阿里云的同学,在公众号内回复「阿里」,获取下载地址
我是风筝,公众号「古时的风筝」,一个在程序圈混迹多年,主业 Java,另外 Python、React 也玩儿的很 6 的斜杠开发者。可以在公众号中加我好友,进群里小伙伴交流学习,好多大厂的同学也在群内呦。
技术交流还可以加群或者直接加我微信。

阿里巴巴泰山版《Java 开发者手册》,也是一份防坑指南的更多相关文章
- 解析一下阿里出品的泰山版 Java 开发手册
说起华山,我就想起岳不群,不,令狐冲:说起泰山,我就想起司马迁,他的那句名言"人总有一死,或重于泰山,或轻于鸿毛",真的发人深省啊.这就意味着,阿里出品的泰山版 Java 开发手册 ...
- 2020阿里最新出品的泰山版Java开发手册,告别垃圾代码
说起华山,我就想起岳不群,不,令狐冲:说起泰山,我就想起司马迁,他的那句名言"人总有一死,或重于泰山,或轻于鸿毛",真的发人深省啊.这就意味着,阿里出品的泰山版 Java 开发手册 ...
- 阿里巴巴 《Java 开发者手册》+ IDEA编码插件
4月22日,阿里巴巴发布了泰山版<Java 开发手册>,以前以为终极版就真的是终极版了,没想到还是想的太简单了,继终极版之后又发布了详尽版.华山版,这不,泰山版又来了.想想也对,行业一直在 ...
- Java开发者使用C++写程序踩的坑
笔者是一个很矛盾的人.平时用Java.但是一开始学习的时候学的是汇编语言,而且对C语言也很熟悉.为什么不学C++呢?是因为我可以完全用Java的编码规范去写C++.因此我不需要了解更多的诸如C++的命 ...
- java 执行shell命令及日志收集避坑指南
有时候我们需要调用系统命令执行一些东西,可能是为了方便,也可能是没有办法必须要调用.涉及执行系统命令的东西,则就不能做跨平台了,这和java语言的初衷是相背的. 废话不多说,java如何执行shell ...
- 阿里巴巴Java开发手册评述
2016年底的时候阿里巴巴公开了其在内部使用的Java编程规范.随后进行了几次版本修订,目前的版本为v1.0.2版.下载地址可以在其官方社区-云栖社区https://yq.aliyun.com/art ...
- 阿里巴巴Java开发手册评
2016年底的时候阿里巴巴公开了其在内部使用的Java编程规范.随后进行了几次版本修订,目前的版本为v1.0.2版.下载地址可以在其官方社区-云栖社区https://yq.aliyun.com/art ...
- 阿里巴巴 Java 开发手册评述
http://blog.jobbole.com/110427 阿里巴巴Java开发手册(终极版)https://pan.baidu.com/s/1c1UQM7Q 阿里巴巴Java开发规约插件p3cGi ...
- 《阿里巴巴Java开发手册1.4.0》阅读总结与心得(五)
笔者作为一名有数年工作经验的Java程序员,仔细研读了这份手册,觉得其是一份不可多得的好材料.阿里巴巴在发布时所说,“阿里巴巴集团推出的<阿里巴巴Java开发手册(正式版)>是阿里巴巴近万 ...
随机推荐
- 小白们错过就没了!Python基础之注释&变量命名
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:DZQTesters PS:如有需要Python学习资料的小伙伴可以加 ...
- 2020.4面试分享(7面收5个offer)
都说金三银四是找工作的最佳时节,由于本人的个人职业规划跟目前工作内容不太相符(具体原因就不透露了,领导平时也要来这里逛,哈哈),四月份挑选了10多家公司投递简历(公司规模从几十人到上万人都有),参加了 ...
- IOC趣味理解
假设一个场景: 假设你是一个四岁孩子,饿了,想吃东西.怎么做? 1,哪有吃的去哪拿,你知道冰箱有吃的,你去冰箱拿〉会有风险.比如,拿了生的吃的,吃坏肚子,甚至拿了不能吃的东西. 2, 找父母(IO ...
- SQLServer系统表使用简介(sysobjects、syscolumns、syscomments等)转载
sysobjects:记录了数据库中每一个表.视图.约束.存储过程等详细内容的表. 表中常用的字段如下 : 列名 数据类型 描述 name sysname 对象名 id int 对象标识号 xtype ...
- web前端该怎么入门?web前端入门教程(非常详细)
初学编程的小伙伴经常会遇到的问题,1.没资源 2.没人带 3.不知道从何开始 ,小编也是从新手期过来的,所以很能理解萌新的难处,现在整理一些以前自己学习的一些资料送给大家,希望对广大初学小伙伴有帮助! ...
- 教你如何快速让浏览器兼容es6
写在正文前,本来这一节的内容应该放在第二节更合适,因为当时就有同学问ES6的兼容性如何,如何在浏览器兼容ES6的特性,这节会介绍一个抱砖引玉的操作案例. 为什么ES6会有兼容性问题? 由于广大用户使用 ...
- SpringCloud-Alibaba-Nacos 服务注册中心&配置中心
Spring Cloud Alibaba 由于 Spring Cloud Netflix 项目进入维护模式(将模块置于维护模式意味着 Spring Cloud 团队将不会再向模块中添加新功能,只会修复 ...
- 网络找的 关于 “中吹” Janus Dongye
看了这篇文章,感觉错过了一个精彩的人生. Janus Dongye, Coding Peasant at Universityof Cambridge (2012-present)(剑桥码农,2012 ...
- cdn服务器
CDN的基本原理和基础架构 CDN是将源站内容分发至最接近用户的节点,使用户可就近取得所需内容,提高用户访问的响应速度和成功率.解决因分布.带宽.服务器性能带来的访问延迟问题,适用于站点加速.点播.直 ...
- Selenium常见报错问题(2)- 解决和分析StaleElementReferenceException异常
如果你在跑selenium脚本时,需要某些异常不知道怎么解决时,可以看看这一系列的文章,看看有没有你需要的答案 https://www.cnblogs.com/poloyy/category/1749 ...