Java 14 在 2020.3.17 日发布正式版了,但现在很多公司还在使用 Java 7 或 Java 8,每当看到 Java 又发布新版本心里就慌得一匹。不过此版本并不是 LTS (长期支持版) 版本,所以不要慌,我们先来了解一下好了,等 LTS 版本发布后再用也不迟。

版本说明

现在 Java 的发布节奏是每年发布两个 GA (General Availability,正式发布版),每 6 个月发布一版,发布月份为 3 月和 9月。

Oracle 只对 LTS 版本提供付费支持,其中包括 Java 8 和 Java 11,Java 11 的付费支持会持续到 2026 年,每 3 年发布一个 LTS 版,下一个 LTS 版本将是 Java 17。

Java 版本的快速更新,一定程度上是为了迎合了开发者和现在技术发展的潮流,同时也利于 Java 版本的交付,把大版本拆成小版本,起码不会出现大的延期了。

Java 14 新特性

此版本包含的 JEP (Java/JDK Enhancement Proposals,JDK 增强提案) 比 Java 12 和 Java 13 加起来都多,总共 16 个新特性。

  • 305: instanceof 的模式匹配 (预览)

  • 343: 打包工具 (Incubator)

  • 345: G1 的 NUMA 内存分配优化

  • 349: JFR 事件流

  • 352: 非原子性的字节缓冲区映射

  • 358: 友好的空指针异常

  • 359: Records (预览)

  • 361: Switch 表达式 (标准)

  • 362: 弃用 Solaris 和 SPARC 端口

  • 363: 移除 CMS (Concurrent Mark Sweep) 垃圾收集器

  • 364: macOS 系统上的 ZGC

  • 365: Windows 系统上的 ZGC

  • 366: 弃用 ParallelScavenge + SerialOld GC 组合

  • 367: 移除 Pack200 Tools 和 API

  • 368: 文本块 (第二个预览版)

  • 370: 外部存储器 API (Incubator)

可以看出其中很多优化都是关于垃圾回收器的,CMS 垃圾回收器也终于退出历史的舞台了,Java 9 被标记为过时的,Java 14 被正式的移除了。

配置 Idea 运行 Java 14

1.下载最新版 Idea

Idea 的预览版 2020.1 是支持 Java 14 的,因此我们最好下载并安装此版本,截图如下:

2.配置 Idea

如果只是下载了最新的 Idea 去运行 Java 14 会提示如下错误:

Error:(10, 35) java: instanceof 中的模式匹配 是预览功能,默认情况下禁用。(请使用 --enable-preview 以启用 instanceof 中的模式匹配)

这是因为 Java 14 中有很多特性还处于预览版,需要配置一下 Idea 支持它 (Java 14) 的预览功能,如下图所示:

小贴士:如果不想使用 Idea 体验新特性,也可以使用 javac 编译代码运行,编译的时候需要加上“--enable-preview”参数,因为 Java 14 中很多功能都处于预览版,完整编译命令“javac --enable-preview --release 14 XXX.java”。

代码体验新特性

接下来我们使用代码的方式,演示几个在 Java 14 中比较重要且好用的新特性,我们会使用新旧代码对比的方式,来进行演示。

1.方便的 instanceof

private static void instanceofTest() {Object obj = "Java 中文社群";// 旧写法if (obj instanceof String) {String s = (String) obj;System.out.println(s);}// 新写法if (obj instanceof String s) {System.out.println(s);}
}

以上程序的执行结果为:

Java 中文社群

Java 中文社群

2.方便的 switch

// 旧写法
switch ("java") {case "java":case "jdk":System.out.println("This is Java.");break;default:System.out.println("default");break;
}
// 新写法
switch ("java") {case "java", "jdk" -> System.out.println("This is Java.");default -> System.out.println("default");
}

以上程序的执行结果为:

This is Java.

This is Java.

3.新增记录类型 Records

// 记录类型
record People(Integer id, String name, Integer age) {
}
// 实例化
People people = new People(1, "老王", 18);
// 输出属性 name
System.out.println(people.name);

以上程序的执行结果为:

老王

我们使用反编译工具来看 Records 最终的实现代码:

➜  example git:(master) ✗ javap  Java14Example\$1People
final class com.example.Java14Example$1People extends java.lang.Record {public com.example.Java14Example$1People(java.lang.Integer, java.lang.String, java.lang.Integer);public java.lang.String toString();public final int hashCode();public final boolean equals(java.lang.Object);public java.lang.Integer id();public java.lang.String name();public java.lang.Integer age();
}

可以看出,People 类最终继承了 Record 类,创建了 toString()、equals()、hashCode() 等方法,还有三个自定义属性方法,等等,这种写法很熟悉嘛,这不就是一个自定义的业务类吗?之前需要一大堆的代码,现在两行代码就搞定了,真是爽,不过我们还发现了一些细节:记录类型是被 final 修饰的,因此他不能有子类了,并且此类也不能继承其他父类,因为他已经继承了 Record 类。

总结

Java 新特性使开发越来越方便了,Java 14 除了垃圾回收器优化的比较多之外,还提供了几个非常实用的语法特性,例如 instanceof 比对并赋值,还有简洁的 Switch 和 Records,不过 Records 特性还是预览功能,意味着很可能在后续的版本中移除哦,它也不能完全替代 Lombok,毕竟它继承了 Record,还有被 final 关键字修饰等局限,期待下个版本会有更多的惊喜。

参考 & 鸣谢

官方日志:https://jdk.java.net/14/release-notes

【END】

近期热文

  • 阿里巴巴Java开发手册建议设置HashMap的初始容量,但设置多少合适呢?

  • 面试又翻车了!这次竟然和Random有关?

  • 因为我说:volatile是轻量级的synchronized,面试官让我回去等通知!

关注下方二维码,订阅更多精彩内容

朕已阅 

Java14发布!Switch竟如此简单?Lombok也不需要了?来用Idea搭建Java14吧!​相关推荐

  1. Java14来了!Switch竟如此简单?Lombok也不需要了?来用Idea搭建Java14吧!

    Java 14 在 2020.3.17 日发布正式版了,但现在很多公司还在使用 Java 7 或 Java 8,每当看到 Java 又发布新版本心里就慌得一匹.不过此版本并不是 LTS (长期支持版) ...

  2. Java14发布,16大新特性,代码更加简洁明快

    2020/3/17日JDK14正式发版,生产环境用不用再说,赶紧下载下来体验一番.不过据说该版本并不是长期版本,但即使再发布新版本也是在此基础上的. 另外,想体验Java14还是需要一些准备工作的,除 ...

  3. iPhone11的计算机怎么用,旧手机数据怎样导入iPhone 11?既不用电脑也不用云,竟这样简单...

    导语:旧手机数据怎样导入iPhone 11?既不用电脑也不用云,竟这样简单 新iPhone11系列发布带来的热潮正席卷全球,无论赞美,还是吐槽,你都不得不承认,苹果仍然具备全球刷屏的能力. 对于无数果 ...

  4. 你知道吗?Linux命令竟如此简单!

    你知道吗?Linux命令竟如此简单! 我Linux安完了,如何快速入门? 1.进入终端 2.好了,入门完了 咳 咳 开个玩笑 2.1查看磁盘容量 2.2新建 2.3查看&删除 2.5解压&am ...

  5. 使用 Tye 辅助开发 k8s 应用竟如此简单(五)

    使用 Tye 辅助开发 k8s 应用竟如此简单(一) 使用 Tye 辅助开发 k8s 应用竟如此简单(二) 使用 Tye 辅助开发 k8s 应用竟如此简单(三) 使用 Tye 辅助开发 k8s 应用竟 ...

  6. 使用 Tye 辅助开发 k8s 应用竟如此简单(四)

    使用 Tye 辅助开发 k8s 应用竟如此简单(一) 使用 Tye 辅助开发 k8s 应用竟如此简单(二) 使用 Tye 辅助开发 k8s 应用竟如此简单(三) 续上篇,这篇我们来进一步探索 Tye ...

  7. 使用 Tye 辅助开发 k8s 应用竟如此简单(三)

    使用 Tye 辅助开发 k8s 应用竟如此简单(一) 使用 Tye 辅助开发 k8s 应用竟如此简单(二) 续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中如 ...

  8. PDManer[元数建模]-v4.1.0发布:一款简单好用的数据库建模平台

    [PDManer元数建模-v4],历时四年,持续升级,工匠精神,做一款简单好用的数据库建模平台. 元数建模平台,使用React+Electron+Java技术体系构建. [PDMan-v2] --&g ...

  9. 对象的发布与逸出简单理解

    目录 对象的发布与逸出简单理解 定义 实战 对象的发布与逸出简单理解 最近来看<并发编程实战>,第3.2节有点疑问,记录一下. 定义 发布:发布(Publish)一个对象的意思是指,使对象 ...

最新文章

  1. 用命令行方式获取打包签名文件的SHA1和MD5
  2. SDN的实现方式及局限性—Vecloud微云
  3. cad 打开硬件加速卡_为什么我能用CAD“飙车”?因为我用了这些加速秘笈
  4. Codeforces Round #540 (Div. 3)(部分题解)
  5. python比较两张图片是否一样_opencv_判断两张图片是否相同
  6. 计算机管理是什么控件,Win7旗舰版系统WMI控件的功能作用是什么?
  7. mavean的依赖传递和排除依赖
  8. 无法创建java虚拟机_java虚拟机创建失败的原因整理
  9. JLU数据结构第六次上机实验解题报告
  10. css translate 坐标,CSS3 位移转换 translate3d()translatez()应用实例
  11. 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结...
  12. 手机远程启动热车!汽车远程启动有什么缺点?你都知道吗汽车手机远程启动优缺点,汽车手机远程启动怎么用,
  13. 2018年银联红包领取方法
  14. 处理器后面的字母含义_电脑CPU型号末端的字母是什么意思?让小编来告诉你吧...
  15. android系统手机流量控制方法,如何实现Android手机流量的控制
  16. C# RadioButton: 单选按钮控件
  17. 科技的成就(三十九)
  18. 125K方案首选SI3933替代AS3933方便使用
  19. 如何使用python编程解决生活中的问题-日常工作问题处理中Python程序的运用
  20. 好消息,可以使用 VS 进行 Qt 的跨平台开发啦!

热门文章

  1. python显示数据长度_python – 获取CSV的长度以显示进度
  2. 【Java从入门到头秃专栏 】(一)学在Java语法之前
  3. win10连接烟台大学校园网
  4. 2Python全栈之路系列之MysQl基本数据类型
  5. 马哥linux第六周作业
  6. Graph(2014辽宁ACM省赛)
  7. [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册
  8. .NET配置文件读写实例(附SosoftConfigHelper类)
  9. mybatis循环map的一些技巧
  10. 1.Dao代码如何编写?