T O P

[资源分享]     阿里重磅发布「Java开发手册泰山版」

  • By - 楼主

  • 2021-01-07 22:14:07
  • 阿里重磅发布「Java开发手册泰山版」

    前几天,也就是 4 月 22 日,阿里发布了「Java开发手册泰山版」,我也是在看到的第一时间就下载下来学习。

    这次发布阿里也是十分重视,我是在阿里云的首页的广告上看到的,这次给了足够的曝光度。

    相比较第一版,我都不知道是从哪流传出来的,当年还是一个朋友神秘兮兮的跟我说,「给你个好东西,看完保准你不后悔」.

    听这说话的语气,我还以为他在跟我搞颜色。

    阿里重磅发布「Java开发手册泰山版」

    从去年的「华山版」开始,阿里的「Java 开发手册」开始以五岳命名,不过这种命名看起来总有一种怪怪的感觉。

    看到华山我第一个想到的是华山论剑和那个练葵花宝典的兄弟。

    阿里重磅发布「Java开发手册泰山版」

    华山版更新于 2019 年 6 月 13 日,距今差不多 10 个月的时间,也是时候更新一个版本了,这次命名的泰山版听起来就有一种大气、稳重的感觉。

    历史的一些版本我全都打包放到云盘了,有需要的同学可以在公众号中回复关键字「Java开发手册」获取。

    阿里重磅发布「Java开发手册泰山版」

    除了这些还有就是本次发布的泰山版。

    先看下本次更新的内容:

    • 发布错误码统一解决方案。
    • 新增 34 条新规约。比如,日期时间的闰年、闰月问题,三目运算的自动拆箱, SQL
      查询的表别名限定, Collectors 类的 toMap()方法使用注意等。
    • 修改描述 90 处。 比如, 阻塞等待锁、 建表的小数类型等。
    • 完善若干处示例。比如, ISNULL 的示例等

    错误码统一解决方案

    阿里重磅发布「Java开发手册泰山版」

    本次也是第一次发布错误码的统一解决方案,那么错误码是用在哪里的?

    答案是异常日志里,方便我们快速的知晓错误来源以及判断到底是谁那里出的问题。

    错误码共分为 5 位,分成两个部分:错误产生来源+四位数字编号,具体释义如下:

    • A 代表的是错误来源于用户端,也就是客户端,用户操作时产生的错误。
    • B 表示错误来源于当前系统,往往是业务逻辑出错,或程序健壮性差等问题。
    • C 表示错误来源于第三方服务,比如 CDN 服务出错,消息投递超时等问题。

    四位数字编号从 0001 到 9999,大类之间的步长间距预留 100 。

    这种解决方案还是十分值得借鉴的,在成熟的系统中,错误码统一的解决方案是十分必要的。

    我们可以通过标准的错误码,直观的知道当前异常是在哪里产生的,根据错误码的字典,可以详细的知道具体的错误原因。

    34 条新增的规约

    34 条新增的规约太多了,我就简单挑一些我认为比较重要的说一下。

    1. 年份天数禁止写死 365 天

    这个我觉得是十分必要的,很多时候,在写代码的时候少想一步,就会为未来埋雷,而且这种雷在测试的时候,不一定是可以发现的。

    比如我们在设置缓存的时候,约定缓存存储时间为一年,代码中却写死了 365 天,在闰年的最后一天,时间归零后,所有的请求将会落在数据库上,直接对数据库产生毁灭性的打击。

    阿里重磅发布「Java开发手册泰山版」

    在规约中,建议我们获取年份的天数使用以下代码:

    // 获取今年的天数
    int daysOfThisYear = LocalDate.now().lengthOfYear();
    
    // 获取指定某年的天数
    LocalDate.of(2011, 1, 1).lengthOfYear();

    2. 三目运算 NPE

    关于三目运算符产生 NPE 的这个问题,我之前还真的没有注意过,也是借着这次的机会来学习一下,先来看下下面这段代码:

    class DemoTests {
        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 类型自动拆箱,由于当前的 c 的值是 null ,就会抛出下面这个异常:

    Exception in thread "main" java.lang.NullPointerException
        at com.geekdigging.demo.DemoTests.main(DemoTests.java:14)

    这是因为在计算问号后面两个表达式的时候,是需要对齐的,当其中一个表达式进行算数运算,会调用 intValue() 这个方法进行自动拆箱成基础运算符,而在三目运算符中,两个表达式的类型必须一致,这就导致了 c 也调用了 intValue() ,但是 c 本身为 null ,这就直接导致了 NPE 的异常。

    日期时间

    我们常用的日期时间的格式化, YYYY 和 yyyy ,这其中的区别不知道有多少人能分得清楚。

    yyyy 表示的是当前天所在的年,而 YYYY 表示的是当前周所在的年,乍一看上去好像没什么问题,但是如果当前周跨年,那么使用 YYYY 取到的年份可能并不是我们想要的结果。

    顺便还有以下内容值得注意:

    • 表示月份是大写的 M
    • 表示分钟则是小写的 m
    • 24 小时制的是大写的 H
    • 12 小时制的则是小写的 h

    推荐的时间日期格式化如下:

    new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

    修改描述 90 处和完善若干处示例

    这两条我没有和前一版华山版做详细的比对,有兴趣的同学可以自行比对下。

    最后

    从 2016 年 12 月份的第一版「Java开发手册」发布,再到今天的「泰山版」的发布,已经走过了三年多的时间,这份手册,也在社区和业界的 Java 开发者的共同努力下,成为了普遍遵循的规范。

    这份手册包含的知识点非常全面,七大维度编程规约、异常日志、单元测试、安全规约、 MySQL 数据库、工程规约、设计规约都有罗列。

    如果你想成为一名优秀的工程师,不仅仅只是 Java 工程师,那么这份手册绝对值得你花时间仔细研读一番,这份手册涵盖了七大维度,除了部分内容是和 Java 的语法紧密贴合,其中还有很多部分是在讲述一些普世的开发规约,无论你的主攻方向是什么语言,这份手册都有一定的借鉴意义。

    最后再插一句,历史全部版本在公众号后台回复关键字「Java开发手册」,即可获取。

    就酱。

    本帖子中包含资源

    您需要 登录 才可以下载,没有帐号?立即注册