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 的,因此我们最好下载并安装此版本,截图如下:
idea 2020.1 版本号.png

2.配置 Idea

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

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

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

小贴士:如果不想使用 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

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

Java中文社群公众号二维码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/546317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在线批量压缩JPG图片-JpegMini

2019独角兽企业重金招聘Python工程师标准>>> 之前有推荐过一个在线批量压缩PNG图片的网站TinyPng,这儿小觉再次推荐一个同类网站,专门在线批量压缩JPG图片的JpegMini。 当然,大家或者会说现在很多工具或者网站都有提供在线批量压缩…

Python创建目录、判断路径是否为目录、打开文件夹操作

1.Python创建目录 # 导入os模块 import os # 判断一个目录path是否存在 os.path.exists(path) # 创建目录path os.mkdir(path) # 多层创建目录path os.makedirs(path) import ospath E:/test/if os.path.exists(path):pass else:os.mkdir(path)2.判断路径是否为目录 # 导入o…

## c 连接字符_用于字符比较的C#程序

## c 连接字符Input characters and compare them using C# program. 输入字符并使用C#程序进行比较。 Prerequisite: Methods to input a single character in C# 先决条件: 在C#中输入单个字符的方法 C#代码比较两个字符 (C# …

《大厂内部资料》Redis 性能优化的 13 条军规!全网首发

这是我的第 43 篇原创文章。Redis 是基于单线程模型实现的,也就是 Redis 是使用一个线程来处理所有的客户端请求的,尽管 Redis 使用了非阻塞式 IO,并且对各种命令都做了优化(大部分命令操作时间复杂度都是 O(1))&#…

联想Thinkpad P15V 安装Debian11后为wifi网卡安装驱动方法

Debian安装默认不带有非自由(Non-Free)软件,Thinkpad P15V 的wifi网卡没有开源驱动,所以一般情况下安装完Debian之后用不了wifi功能,貌似Ubuntu也是如此。 1.按照https://datutu.blog.csdn.net/article/details/12263…

math.trunc_带有Python示例的math.trunc()方法

math.truncPython math.trunc()方法 (Python math.trunc() method) math.trunc() method is a library method of math module, it is used to get the truncated integer value of a number, it accepts a number (either an integer or a float) and returns the real value …

Redis 性能优化的 13 条军规!史上最全

Redis 是基于单线程模型实现的,也就是 Redis 是使用一个线程来处理所有的客户端请求的,尽管 Redis 使用了非阻塞式 IO,并且对各种命令都做了优化(大部分命令操作时间复杂度都是 O(1)),但由于 Redis 是单线程…

仿新浪微博滚动,无文字渐显功能

又一款仿新浪微博的文字滚动功能&#xff0c;去掉了滚动开始时候的文字渐显效果&#xff0c;似乎更明淅了&#xff0c;又一种风格的新浪微博大厅文字滚动&#xff0c;要的就复制代码吧。<!DOCTYPE HTML><html lang"en-US"><head><meta charset&…

Linux Debian11 Podman容器常用命令

Podman 是一个开源的容器运行时项目&#xff0c;可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。它不需要在你的系统上运行任何守护进程&#xff0c;并且它也可以在没有 root 权限的情况下运行。 Podman 可以管理和运行任何符合 OCI&#xff08;Open Con…

js math.hypot_带有Python示例的math.hypot()方法

js math.hypotPython math.hypot()方法 (Python math.hypot() method) math.hypot() method is a library method of math module, it used to find the result of Euclidean norm, sqrt(x*x, y*y), it accepts two numbers and returns the result of Euclidean norm. math.hy…

惊呆了,竟然可以用这种方式秒建Redis集群?

前面我们讲了《Redis 性能优化的 13 条军规&#xff01;》&#xff0c;其中最重要的一条就是使用 Redis 的集群功能&#xff0c;那么本文我们就来看看&#xff0c;如何用 1s 钟的时间来创建一个 Redis 集群。 Redis Cluster 是 Redis 3.0 版本推出的 Redis 集群方案&#xff0…

创建索引的方法有两种

创建索引的方法有两种&#xff1a;创建表的同时创建索引&#xff0c;在已有表上创建索引。方法一&#xff1a;创建表的同时创建索引。使用这种方法创建索引时&#xff0c;可以一次性地创建一个表的多个索引&#xff08;例如唯一性索引、普通索引、复合索引等&#xff09;&#…

华为交换机S5735S-L24T4S-QA2无法telnet远程访问

以前都是按照https://datutu.blog.csdn.net/article/details/106810113方法配置不同网段通过静态路由实现互通,华为S5700交换机开启telnet远程指定IP登陆配置(强烈推荐),现在新买的华为数通智选交换机S5735S-L24T4S-QA2 也是按照这步骤配置,令人不解的是,竟然无法telnet访…

frexp 中文_带有Python示例的math.frexp()方法

frexp 中文Python math.frexp()方法 (Python math.frexp() method) math.frexp() method is a library method of math module, it is used to get the pair of mantissa and exponent of the given number, it accepts a number (integer or float) and returns a tuple of ma…

99%的程序员都在用Lombok,原理竟然这么简单?我也手撸了一个!|建议收藏!!!...

世界上只有一种英雄主义&#xff0c;就是看清生活的真相之后依然热爱生活。对于 Lombok 我相信大部分人都不陌生&#xff0c;但对于它的实现原理以及缺点却鲜为人知&#xff0c;而本文将会从 Lombok 的原理出发&#xff0c;手撸一个简易版的 Lombok&#xff0c;让你理解这个热门…

PyQt5中多线程模块QThread解决界面卡顿无响应问题,线程池ThreadPoolExecutor解决多任务耗时操作问题

使用多线程模块QThread可以解决PyQt5界面程序执行比较耗时操作时,程序卡顿出现的无响应以及界面输出无法实时显示的问题。 下面例子演示: 单击“运行”按钮,启动主线程,在子线程中采用线程池ThreadPoolExecuto解决ping多个IP耗时问题。在主界面把已ping过的IP添加到显示框…

python中acosh_带有Python示例的math.acosh()方法

python中acoshPython math.acosh()方法 (Python math.acosh() method) math.acosh() method is a library method of math module, it is used to get the hyperbolic arc cosine of the given number in radians, it accepts a number and returns hyperbolic arc cosine. mat…

干货!操作系统基础知识汇总!转给要面试的同学吧

作者&#xff1a;Guide哥来源&#xff1a;公众号 JavaGuide很多读者抱怨计算操作系统的知识点比较繁杂&#xff0c;自己也没有多少耐心去看&#xff0c;但是面试的时候又经常会遇到。所以&#xff0c;我带着我整理好的操作系统的常见问题来啦&#xff01;这篇文章总结了一些我觉…

eclipse的tomcat运行mave web项目

2019独角兽企业重金招聘Python工程师标准>>> 在eclipse中配置maven 安装成功后&#xff0c;就会多出Maven选项&#xff0c;在Installations中添加下载的Maven 在User Settings中配置本机的默认仓库 使用Eclipse的maven构建一个web项目 1、选择建立Maven Project 选…

Python在shell终端中显示进度条

Python在shell终端中显示进度条简单代码&#xff1a; from time import sleep from tqdm import tqdmmax 100 for i in tqdm(range(max)):sleep(0.1)效果如下&#xff1a;