写点什么

阿里巴巴 Java 开发手册泰山版解读

用户头像
Bruce Duan
关注
发布于: 2020 年 05 月 02 日
阿里巴巴Java开发手册泰山版解读

《Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,公开到业界后,众多社区开发者踊跃参与,共同打磨完善,系统化地整理成册。

会当凌绝顶,一览众山小。经过一年的修炼,《Java 开发手册》泰山版于 4.22 正式发布。此次泰山版发布,将带来三大亮点:新增 5 条日期时间规约新增 2 条表别名 sql 规约新增统一错误码规约

泰山版

一、日期时间规约

如下图所示,新增的日期时间规约归属于第一部分:编程规约

日期时间

这一段总计此次新增了 7 个规约条例,前五条全部是强制类型的:

  1. 日期格式化时,传入 pattern 中表示年份统一使用小写的 y。

解读:yyyy 表示当天所在的年,而大写的 YYYY 代表是 week in which year。意思是当天所在的周所属的年份,一周从周日开始,周六结束,只要本周跨年,返回的 YYYY 就是下一年。

  1. 在日期格式中分清楚大写的 M 和小写的 m,大写的 H 和小写的 h 分别指代的意义。

解读:大写 M 表示月份,小写 m 表示分钟。大写 H 表示 24 小时制,小写 h 表示 12 小时制。

  1. 获取当前毫秒数:System.currentTimeMillis(); 而不是 new Date().getTime()。

 解读:System.currentTimeMillis()是一个 native 方法,依赖操作系统,性能更好。

  1. 不允许在程序任何地方中使用:1)java.sql.Date 2)java.sql.Time 3)java.sql.Timestamp。

解读:第 1 个不记录时间,getHours()抛出异常;第 2 个不记录日期,getYear()抛出异常;

第 3 个在构造方法 super((time/1000)*1000),fastTime 和 nanos 分开存储秒和纳秒信息。

  1. 不要在程序中写死一年为 365 天,避免在公历闰年时出现日期转换错误或程序逻辑 错误。

后两条是推荐类型的:

  1. 避免公历闰年 2 月问题。闰年的 2 月份有 29 天,一年后的那一天不可能是 2 月 29 日。

解读:打个比方,某个任务想一年运行一次,那么 cron 表达式不要写成:0 0 0 29 2 ?。而应该写成:0 0 0 28 2 ?。前一个表达式实际上是 4 年才执行一次,后一个表达式才是一年执行一次。

  1. 使用枚举值来指代月份。如果使用数字,注意 Date,Calendar 等日期相关类的月份 month 取值在 0-11 之间。

解读:Calendar.JANUARY 的值实际上就是 0(Calendar 中定义为:public final static int JANUARY = 0)。

二、2 条表别名 sql 规约

此次泰山版新增了两条表别名 sql 规约。一条是强制的,一条是推荐的。

[强制] 对于数据库中表记录的查询和变更,只要涉及多个表,都需要在列名前加表的别名(或表名)进行限定。说明:对多表进行查询记录、更新记录、删除记录时,如果对操作列没有限定表的别名(或表名),并且操作列在多个表中存在时,就会抛异常,相信大家都碰到过 Column 'xxxx' in field list is ambiguous 这个异常提示吧。正例:select t1.name from table_first as t1 , table_second as t2 where t1.id=t2.id;

[建议] SQL 语句中表的别名前加 as,并且以 t1、t2、t3、...的顺序依次命名。

说明:

1)别名可以是表的简称,或者是根据表出现的顺序,以 t1、t2、t3 的方式命名。

2)别名前加 as 使别名更容易识别。参考正例:select t1.name from table_first as t1, table_second as t2 where t1.id=t2.id。

三、统一错误码规约

如下图所示,新增的统一错误码规约是一个全新的部分,即附 3。错误码定义对每一个系统的重要性不言而喻,可以说必不可少。良好的错误码定义能让 API 的结果变得更易懂,同时能大大提升排查问题效率,并且还可以针对每个异常码出现的次数做实时监控:


如下图所示,是截取的部分错误码。完整版请下载最新的 Java 开发手册泰山版。


用户头像

Bruce Duan

关注

做最好版本的自己 2020.05.01 加入

主要分享Java服务端相关的技术,欢迎关注!啥也不说了上代码开始撸。

评论 (1 条评论)

发布
用户头像
这样的事情还是非常功德无量的,阿里巴巴在开源这方面做得确实很好啊
2020 年 05 月 02 日 18:49
回复
没有更多了
阿里巴巴Java开发手册泰山版解读