阿里的《Java开发手册》间隔前次发布现已过去了 10 个月了,而这次发布也添加了很多干货内容,比方:新增 34 条规约,修正描绘 90 处,其间过错码规则更是第一次提出完好的解决计划,发布日志S , j如下图所示:

阿里新版《Java 开发手册(泰山版)》内容解读(附下载地址)

新增内容概览

本次更新主要更新的内容有:

  1. 新增了过错码标准;
  2. 扩大了日期(闰年、闰月等)处理计划;
  3. 表别号标准;
  4. 三目运算符标准等。

接下来咱们来看这些新增内容的具体含义2 V –

1.过错码标准

之前版别中是没有关于「过错码」的全体阐? m / / 8 Z r s f明的,而这个版别添加了很大的篇幅,^ v | 3来把这个前后端合作的重要环节「过错码」部分,3 0 ) b # 4 r F h做了详细的标准和阐明,可3 s 4 k o ] L Z谓非常的香,具体标准如下:

  • 【强制】过错码的制定原则:快速溯源、简略易记、沟通标准化。
  • 【强制】过错码不体现版别号和过错等级信息。
  • 【强制】全部正常,但不得不填充过错码时回来五个零:00000。
  • 【强制】过错码为字符串类型,共 5 位,分成两个部分:过错发生来历 + 四位数字编号。

阐明:过错发生来历分为 A/B/C:

  • A:表明过错来历于用户,比方参数过错,用户安装版别过低,用户付出超时等问题;
  • B:表明过错来历于当时体系,往往是事务逻辑出错,: _ , m = Y I k或程序健壮性差等g D ( L % 9 * /问题;
  • C:表明过错来历于第三方服务,比方 CDN 服务出错,消息投递超时等问题;四位数字编号B 9 T M从 0001 到 9999,大类之M ~ ,o T ( & z = . W &的步长间距预留 100,详情可见《Java开发手册》Y Z v ! ` b正文。

2.扩大了日期处理计划

一个写死为 365 天的年份天数,在闰年里让咱们尝尽了悲伤痛楚,比方,缓存有效期 = 3652460*60 秒,成果提前一天 ` Z n Z )所有缓存一起失效,高E G F w ^ 并发拜访时数据库就跪了。

【强制】不要在程序中写死一年为 365 天,避免在公历5 h N h ;闰年时呈现日期转换过错或程序逻辑过错。

正例:

// 获| 1 } y / R O F F取本年的天数
int daysOfThisYear = LocalDate.now().lengthOfYear();
// 获取指定某年的天数
LocalDate.of(2011, 1, 1).lengthOfYear();% w ; % d ! 8 O ?

反例:

// 第一种状况:在闰年 366 天时,呈现数组越界反常
int[] dayArray = new int[365];
// 第B T U N K B o 二种状况:一年有效期的会员制,本年 1 月 26 日注册,硬编码 365 回来的却是 1 月 25 日
Calendar calendar =m $ ; S + A Calendar.getInstance();
calendI k ) | x 5 ? T Qar.set(2020, 1, 26);
cal. Z Kendar.add(Calendar.DATE, 365S G E f);

3.表别号标准

【强制】关于数据库中表记载的查询和改变,只要触及多个表,都需 表名)进行限定。
阐明q N O 2 8 R q ) f:对多表进行查询记载、更新记载、删除记载时,假如对操作列没有限定表的别号(或表名),并且 操作列在多个表中存在时,就H C m ] O N会抛反常。 正例:select t1.name from table_f] ? [ c } –irL / V / $ `st as t1 ,W ? 9 I Y % { b table_second as t2 wher] M ;e t1.id=t2.id;

反例:在某事务中,因为多表相关查询句子没有加表的别号(或表名)的限制,正常运转两年后,最近在 某个表中添加一个同名字段,在预发布环境做数据库改a ] z变后,线上查询句子呈现出 1052 反常:Col^ e N : 8 Mumn ‘name’ in field list is ambiguous。

【推荐】SQL 句子中表的别号前加 as,并且以 t1、t2、t3、…的次序顺次命名。
阐明:

  • 别号可所以表的简称,或者是根据表呈现的次序,以 t1、t2、t3 的} G M方式命名。
  • 别号前加 as 使别号更容易识别。 正例:selm S C 3 .ect t1.name from table_first as t1, table_second as t2 where t1.id=t2.id;

4.三目运算符标准

原来在三目运算符中:

condition ? 表达式1 : 表达= x s e * q式2

表达式 1 和 2 在触及算术核& @ v O v [算或数据类型转换时,会触发主动拆箱。拆箱操作原本没有问题,但是当其间的操作数为 null 值时,一个大大y ` V x Z的 NPE 就砸到了我滴脸上,如下代码所示:

Integer a = 1;
Integer bD @ B j T u | * = 2;
Integer c = null;
Boolean flag = false;
Integer resultQ ? m & G  p V a = (flag ?  aV E &  G * b  :  c);

留意:a*b 的成果是 int 类型u b ^ k k f,那么 c 会强制拆0 h 1 ? : ( K l箱成 int 类型,抛出 NPE 反常。

【强制】三目运算符 condition? 表达式 1 : 表达式 2 中,高度留意表达式 1 和 2 在类型6 { [ Q ] . 4对齐时,或许抛出R k 0 g ) –因主动拆箱导致的 NPE 反常。

阐明:以下两种场景会触发类型对齐的拆箱操作:

  • 表达式 1 或表达式 2 的值只要有一个是原始类型。^ Y Y t
  • 表达式 1 或表达式 2 的值的类型5 – 7 O ~ L不一致,会强制拆箱升级成表明规模更大的那个类型。

总结

阿里的《Java 开发手册》之前是咱们公司,每个新入职职工的必读资料,在我的 Java 编程生计中发挥了巨大的作用。毫不夸大的说,它的诞生影响并协助了整个 Jav+ W ( 8 G 4 + ia 行业,以上仅仅附了新版《Java 开发手册(泰山版)》的部分内容,更精彩的内2 ( T 1 $容点击下载:pan.baidu.com/s/1tyUFbfOG… 密码:o62a。

感谢 & 道谢

《Java 开发手册(泰山; ? P版)》

《史上最强《Java 开发手册》泰山版王者归来》

更多精彩内容,请重视微信公众号「Java中文社群」

阿里新版《Java 开发手册(泰山版)》内容解读(附下载地址)