Java14发布!Switch竟如此简单?Lombok也不需要了?来用Idea搭建Java14吧!
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吧!相关推荐
- Java14来了!Switch竟如此简单?Lombok也不需要了?来用Idea搭建Java14吧!
Java 14 在 2020.3.17 日发布正式版了,但现在很多公司还在使用 Java 7 或 Java 8,每当看到 Java 又发布新版本心里就慌得一匹.不过此版本并不是 LTS (长期支持版) ...
- Java14发布,16大新特性,代码更加简洁明快
2020/3/17日JDK14正式发版,生产环境用不用再说,赶紧下载下来体验一番.不过据说该版本并不是长期版本,但即使再发布新版本也是在此基础上的. 另外,想体验Java14还是需要一些准备工作的,除 ...
- iPhone11的计算机怎么用,旧手机数据怎样导入iPhone 11?既不用电脑也不用云,竟这样简单...
导语:旧手机数据怎样导入iPhone 11?既不用电脑也不用云,竟这样简单 新iPhone11系列发布带来的热潮正席卷全球,无论赞美,还是吐槽,你都不得不承认,苹果仍然具备全球刷屏的能力. 对于无数果 ...
- 你知道吗?Linux命令竟如此简单!
你知道吗?Linux命令竟如此简单! 我Linux安完了,如何快速入门? 1.进入终端 2.好了,入门完了 咳 咳 开个玩笑 2.1查看磁盘容量 2.2新建 2.3查看&删除 2.5解压&am ...
- 使用 Tye 辅助开发 k8s 应用竟如此简单(五)
使用 Tye 辅助开发 k8s 应用竟如此简单(一) 使用 Tye 辅助开发 k8s 应用竟如此简单(二) 使用 Tye 辅助开发 k8s 应用竟如此简单(三) 使用 Tye 辅助开发 k8s 应用竟 ...
- 使用 Tye 辅助开发 k8s 应用竟如此简单(四)
使用 Tye 辅助开发 k8s 应用竟如此简单(一) 使用 Tye 辅助开发 k8s 应用竟如此简单(二) 使用 Tye 辅助开发 k8s 应用竟如此简单(三) 续上篇,这篇我们来进一步探索 Tye ...
- 使用 Tye 辅助开发 k8s 应用竟如此简单(三)
使用 Tye 辅助开发 k8s 应用竟如此简单(一) 使用 Tye 辅助开发 k8s 应用竟如此简单(二) 续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中如 ...
- PDManer[元数建模]-v4.1.0发布:一款简单好用的数据库建模平台
[PDManer元数建模-v4],历时四年,持续升级,工匠精神,做一款简单好用的数据库建模平台. 元数建模平台,使用React+Electron+Java技术体系构建. [PDMan-v2] --&g ...
- 对象的发布与逸出简单理解
目录 对象的发布与逸出简单理解 定义 实战 对象的发布与逸出简单理解 最近来看<并发编程实战>,第3.2节有点疑问,记录一下. 定义 发布:发布(Publish)一个对象的意思是指,使对象 ...
最新文章
- 用命令行方式获取打包签名文件的SHA1和MD5
- SDN的实现方式及局限性—Vecloud微云
- cad 打开硬件加速卡_为什么我能用CAD“飙车”?因为我用了这些加速秘笈
- Codeforces Round #540 (Div. 3)(部分题解)
- python比较两张图片是否一样_opencv_判断两张图片是否相同
- 计算机管理是什么控件,Win7旗舰版系统WMI控件的功能作用是什么?
- mavean的依赖传递和排除依赖
- 无法创建java虚拟机_java虚拟机创建失败的原因整理
- JLU数据结构第六次上机实验解题报告
- css translate 坐标,CSS3 位移转换 translate3d()translatez()应用实例
- 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结...
- 手机远程启动热车!汽车远程启动有什么缺点?你都知道吗汽车手机远程启动优缺点,汽车手机远程启动怎么用,
- 2018年银联红包领取方法
- 处理器后面的字母含义_电脑CPU型号末端的字母是什么意思?让小编来告诉你吧...
- android系统手机流量控制方法,如何实现Android手机流量的控制
- C# RadioButton: 单选按钮控件
- 科技的成就(三十九)
- 125K方案首选SI3933替代AS3933方便使用
- 如何使用python编程解决生活中的问题-日常工作问题处理中Python程序的运用
- 好消息,可以使用 VS 进行 Qt 的跨平台开发啦!
热门文章
- python显示数据长度_python – 获取CSV的长度以显示进度
- 【Java从入门到头秃专栏 】(一)学在Java语法之前
- win10连接烟台大学校园网
- 2Python全栈之路系列之MysQl基本数据类型
- 马哥linux第六周作业
- Graph(2014辽宁ACM省赛)
- [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册
- .NET配置文件读写实例(附SosoftConfigHelper类)
- mybatis循环map的一些技巧
- 1.Dao代码如何编写?