文章目录

  • 前言
  • 发布错误码统一解决方案
  • 新增 34 条新的规约
    • 1)日期时间
    • 2)三目运算的 NPE 问题
    • 3)Collectors 类的 toMap() 方法
  • 修改描述 90 处
  • 完善若干处示例
  • 最后

前言

东岳泰山;西岳华山;南岳衡山;北岳恒山;中岳嵩山
其中以东岳泰山为首,而这本阿里出品的泰山版 Java 开发手册经过阿里巴巴技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断的完善,系统化地整理成册,是迄今为止最重量级的。

新版都更新了哪些内容呢?可以从官方的版本历史中看得出来。

发布错误码统一解决方案

错误码用来干嘛呢?答案是异常日志,方便我们快速知晓错误来源,判断是谁那出的问题。

  • 上图中 A 表示错误来源于用户;
  • 还有 B 级的,表示错误来源于当前系统;
  • C 级的,表示错误来源于第三方服务,比如 CDN 服务器。

这个解决方案还是值得借鉴的,很多成熟的系统都在使用错误码,如果你对接过微信支付的话,应该对错误码不会感到陌生。看到错误码,然后在手册中搜索一下,就能快速知晓错误的类型,还是很不错的。

点击此处免费领取手册,暗号csdn

新增 34 条新的规约

34 条太多了,我就挑几个重要的拉出来说一说吧。

1)日期时间

还记得之前技术圈的刷屏事件吧?就是那个 YYYY 和 yyyy 造成的问题。大写的 Y 表示的是当天所在的这一周是属于哪个年份的,小写的 y 表示的是当天所在的年份,差别还是挺大的。你品,你细品。

还有,大写的 M 和 小写的 m 是不同的,大写的 H 和小写的 h 也是不同的。

另外,像获取当前毫秒数应该使用 System.currentTimeMillis(),而不是 new Date().getTime(),这些细致的规约,都应该牢记在心中,不要去犯这些低级的错误。

2)三目运算的 NPE 问题

说实话,这个问题我之前从来没有注意,这次看到了,就一起来学习一下。先来看下面这段代码:

public class TestCondition {public static void main(String[] args) {Integer a = 1;Integer b = 2;Integer c = null;Boolean flag = false;Integer result = flag ? a * b : c;}
}

条件 a * b 属于算术运算,它俩相乘后的结果是一个 int 类型,这就会导致 c 这个 Integer 类型自动拆箱,由于值为 null,就抛出了以下错误:

Exception in thread "main" java.lang.NullPointerExceptionat com.cmower.mkyong.TestCondition.main(TestCondition.java:9)

那可能你会感到好奇,为什么两个 Integer 类型的变量相乘后会是一个 int 类型呢,这主要是由编译器决定的,它就是这么设计的,来看一下反编译后的字节码:

public class TestCondition
{public static void main(String args[]){Integer a = Integer.valueOf(1);Integer b = Integer.valueOf(2);Integer c = null;Boolean flag = Boolean.valueOf(false);Integer result = Integer.valueOf(flag.booleanValue() ? a.intValue() * b.intValue() : c.intValue());}
}

a * b 时发生了自动拆箱,调用了 intValue() 方法,而三元运算的两个表达式的类型必须一致,这就导致 c 也调用了 intValue() 方法,由于 c 本身为 null,那就只能 NPE 了。明白了吧?

3)Collectors 类的 toMap() 方法

手册上说,在使用 java.util.stream.Collectors 类的 toMap() 方法转 Map 时,一定要使用含有参数类型为 BinaryOperator,参数名为 mergeFunction 的方法,否则当出现相同 key 值时会抛出 IllegalStateException 异常。
这段话可能理解上有点难度,那先来看一段代码吧!

String[] departments = new String[] {"芸芸", "芸芸", "芸芸";
Map<Integer, String> map = Arrays.stream(departments).collect(Collectors.toMap(String::hashCode, str -> str));

运行这段代码的时候,就会抛出异常,堆栈信息如下所示:

Exception in thread "main" java.lang.IllegalStateException: Duplicate key 867758096 (attempted merging values 芸芸and 芸芸)at java.base/java.util.stream.Collectors.duplicateKeyException(Collectors.java:133)at java.base/java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1(Collectors.java:180)

key 重复了,因为两个“芸芸”的 hashCode 相同,那这时候的解决办法呢?

String[] departments = new String[] {"芸芸", "芸芸", "芸芸"};
Map<Integer, String> map = Arrays.stream(departments).collect(Collectors.toMap(String::hashCode, str -> str, (v1, v2) -> v2));

多加个参数 (v1, v2) -> v2,也就是重复的时候选一个。来看看此时调用的 toMap() 方法吧。

public static <T, K, U>
Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,Function<? super T, ? extends U> valueMapper,BinaryOperator<U> mergeFunction) {return toMap(keyMapper, valueMapper, mergeFunction, HashMap::new);
}

BinaryOperator 和 mergeFunction 是不是出现了?

点击此处免费领取手册,暗号csdn

修改描述 90 处

手册上说,比如,阻塞等待锁、建表的小数类型等描述有修改,我特么花了半个小时也没有找出来和上一个版本之间的差别。

不知道是不是手册的小编在瞎说,你要是能发现差别,告诉我一声。

点击此处免费领取手册,暗号csdn

完善若干处示例

比如说 SQL 语句栏目里的 ISNULL 的示例,确实比华山版追加了一个更详细的反例,见下图。


但说实话,这段反例的描述我看了至少六遍才搞懂是什么意思。首先,不要在 null 前换行,影响阅读性,这倒是真的;其次呢,不要使用 column is null 进行判空,使用 ISNULL(column) 判空,效率更高,也不会出现换行的情况。

select * from cms_subject where column is null and
column1 is not null;select * from cms_subject where ISNULL(column) and
column1 is not null;

最后

2016 年 12 月份,阿里首次向业界开放了这份《Java 开发手册》,到泰山版发布,已经过去了 3 年多时间了,这份手册也在全球 Java 开发者共同的努力下,成为业界普遍遵循的开发规范。这份手册包含的知识点非常全面,七大维度编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程规约、设计规约都有罗列。

如果你想成为一名优秀的 Java 工程师,那么这份手册上的内容几乎是必须要掌握的。如果你手上还没有这份手册,可以点击此处免费领取,暗号csdn。已经有了的程序员,请忽略。最后,我衷心地祝福你,希望你能学有所成,加油!


需要此文档的可以点击此处免费领取,暗号csdn已经有了的程序员,请忽略。

《码出高效-阿里巴巴Java开发手册-泰山版》阿里最新出品的泰山版Java开发手册,告别垃圾代码相关推荐

  1. TowerJ编译java_2020阿里最新出品的泰山版Java开发手册,告别垃圾代码

    说起华山,我就想起岳不群,不,令狐冲:说起泰山,我就想起司马迁,他的那句名言"人总有一死,或重于泰山,或轻于鸿毛",真的发人深省啊.这就意味着,阿里出品的泰山版 Java 开发手册 ...

  2. 阿里巴巴Java 开发手册 码出高效,码出质量 1.4.0

    前言 <阿里巴巴Java 开发手册>是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,系统化地整理成册,回馈给广大开发者.现代软件行业的高速发展对开 ...

  3. 阿里巴巴开发手册最新版、码出高效、性能调优实战、成神之路

    清幽现云山, 虚静出内功 <阿里巴巴Java开发手册>是阿里内部Java工程师所遵循的开发规范,涵盖编程规约.单元测试规约.异常日志规约.MySQL规约.工程规约.安全规约等,这是近万名阿 ...

  4. 《码出高效:Java 开发手册》正式发布,83行代码计划启动

    可爱的Java开发者们,让你们久等了! 9月22日杭州云栖大会,众所期待的新书<码出高效:Java 开发手册>正式发布,并宣布将所有图书收益捐赠于技术公益项目. 本次新书发布,邀请了来自阿 ...

  5. 《码出高效:Java开发手册》背后的故事

    2018年12月22日,由博文视点组织的<码出高效:Java开发手册>作者见面会暨签售仪式在北京举行,InfoQ对书籍作者孤尽(杨冠宝).鸣莎(高海慧)进行了采访,了解了此书出版背后的一些 ...

  6. 让你久等了!《码出高效:Java 开发手册》正式发布

    可爱的Java开发者们,让你们久等了! 9月22日杭州云栖大会,众所期待的新书<码出高效:Java 开发手册>正式发布,并宣布将所有图书收益捐赠于公益项目. 此书从立意到付梓,历时超过两年 ...

  7. 码出高效:Java开发手册PDF

    <码出高效:Java 开发手册>源于影响了全球250万名开发工程师的<阿里巴巴Java开发手册>,作者静心沉淀,对Java规约的来龙去脉进行了全面而彻底的内容梳理.<码出 ...

  8. 码出高效:Java开发手册笔记(线程池及其源码)

    码出高效:Java开发手册笔记(线程池及其源码) 码出高效:Java开发手册笔记(线程池及其源码) 码出高效:Java开发手册笔记(线程池及其源码) 前言 一.线程池的作用 线程的生命周期 二.线程池 ...

  9. 码出高效:java开发手册_Java 11手册:最聪明的技巧来简化Java 11导航

    码出高效:java开发手册 Java 11:提示和技巧,日常陷阱及更多 为了庆祝Java 11的发布,我们邀请了八位Java专家与他们分享最新版本的最佳和最差体验. 由于本系列旨在作为Java 11的 ...

  10. 码出高效:java开发手册_Java 11手册:Java专家分享他们在Java 11方面的最佳和最差的经验

    码出高效:java开发手册 Java 10标志着Java生态系统新时代的开始,但最新版本证明仍有一些里程碑可言. Java 11是Oracle新的六个月周期中的第一个LTS版本. 您可以在此处下载Ja ...

最新文章

  1. 2022-2028年中国分散式风电行业投资分析及前景预测报告
  2. 怎样查看端口占用情况
  3. linux排除多个文件,linux – 通过排除其父文件夹为多个目录创建单个tar文件
  4. 食物链 poj 1182
  5. l usr bin mysql,解决/usr/bin/ld: cannot find -lmysqlclient错误
  6. linux bash脚本编程知识点
  7. win7网络的计算机名称,Win7指定的网络名不再可用快速解决教程
  8. jax-rs jax-ws_什么是JAX-RS注释? (第3部分)
  9. noip退役之路--祝福
  10. TensorFlow.js快速入门
  11. 找到一个或多个多重定义的符号_初中数学之相反数,总结规律,学会多重符号的化简...
  12. Linux常用命令~~~
  13. Ubuntu下配置Window CIFS共享
  14. xm list源码分析
  15. Java记录 -4- 运算符 Operator
  16. 程序员面试金典——17.5珠玑妙算
  17. Html5——WebSocket
  18. 窗口变化相关消息 OnSize、OnSizing和OnGetMinMaxInfo
  19. Linux/Windows/C++网络开源库项目集合
  20. php添加gd扩展,php安装gd扩展的方法

热门文章

  1. 尚硅谷 硅谷新闻_硅谷如何将真正的创新变成一种夸大的幻想
  2. GPS之家论坛最新地图下载精选 汇集论坛精华 不断更新中(2013 3 30)
  3. java 万年历接口
  4. SOTA级发丝抠图模型PP-Matting开源,支持多场景精细化分割
  5. 可启动 ISO 合并、Windows 安装光盘合集
  6. openkore 207cn 中文加强版 2010.01.12【彪彪修改】
  7. 变量太多太复杂该怎么得出结论?——SPSS因子分析操作的详细讲解与介绍
  8. 使用适用于Windows的Ultimate Boot CD轻松地重置忘记的密码
  9. 种子编辑 android6,360种子编辑器安卓APK下载-360种子在线编辑器手机版下载v1.0 Android版-腾牛安卓网...
  10. PPT小技巧:拆解汉字!