官方正式发布 Java 16
前言
就在2021/03/16,官方正式发布了Java 16。我们可以下载使用Java 16了。

特性
向量API(孵化)
在运行期,Vector 表示向量计算可以可靠地编译成支持CPU架构上的最佳矢量硬件指令,从而实现优于等效标量计算的性能。提升了Java在CPU向量计算的性能。
启用c++ 14 语言特性
允许在JDK中C++源代码中使用 C ++ 14的新特性,并给出哪些特性可能在热点代码中使用的具体指导。
从Mercurial迁移到Git
将OpenJDK社区的源代码库从Mercurial (hg)迁移到Git。
迁移到GitHub
在GitHub上托管OpenJDK社区的Git仓库。与JEP 357(从Mercurial迁移到Git)一起,这将把所有存储库OpenJDK项目迁移到GitHub上,包括JDK特性版本和版本11及以后的JDK更新版本。
ZGC 并发线程堆栈处理
将ZGC线程堆栈处理从安全点移动到并发阶段。
Unix-Domain 套接字通道
在java.nio.channels包中,为socket channel和server-socket channel api增加Unix-domain(AF_UNIX)套接字支持。
Alpine Linux Port
在x64和AArch64架构上,将JDK移植到Alpine Linux和其他使用musl作为主要C库的Linux发行版上。
Elastic Metaspace
更及时地将未使用的热点类元数据(即metaspace元空间)内存返回给操作系统,减少元空间的占用,并简化元空间代码,以减少维护成本。
Windows/AArch64 Port
将 JDK 移植到 Windows / AArch64。随着新的消费者级和服务器级AArch64 (ARM64)硬件的发布,Windows/AArch64已经成为终端用户需求的一个重要平台。
Foreign Linker API(孵化)
引入一个API,该API提供对本机代码的静态类型纯java访问。这个API,与外部内存API (JEP 393),能极大简化绑定到本机库的容易出错的过程。
基于值的类的警告
将原始包装类指定为基于值的类,并弃用它们的构造函数以便删除,并提示新的弃用警告。提供关于在Java平台中任何基于值类的实例上进行同步的警告。
打包工具
提供jpackage工具,用于打包自包含的Java应用程序。
外部内存访问API(第三次孵化)
引入一个API,允许Java程序安全有效地访问Java堆之外的外部内存。
为instanceof进行模式匹配
使用对instanceof操作符的模式匹配来增强Java编程语言。模式匹配允许程序中的公共逻辑,即从对象中有条件地提取组件,以更简洁和更安全的方式表达。
以前我们使用是这样的,先判断类型,再强制转换。
if (obj instanceof String) {
String s = (String) obj;
...
}
Java 16中,可以这样使用了,直接使用遍历s。
if (obj instanceof String s) {
// 可以直接使用s
...
}
还可以这样使用,但是前提是第一个判断成立,第二个才能正确执行,所以可以使用&&,不能使用||。
if (obj instanceof String s && s.length() > 5) {
flag = s.contains("jdk");
}
Records
用Records关键字增强Java编程语言,Records作为不可变数据透明载体的类。
以前我们定义一个类是这样的,如下:
class Point {
private final int x;
private final int y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
int x() { return x; }
int y() { return y; }
public boolean equals(Object o) {
if (!(o instanceof Point)) return false;
Point other = (Point) o;
return other.x == x && other.y == y;
}
public int hashCode() {
return Objects.hash(x, y);
}
public String toString() {
return String.format("Point[x=%d, y=%d]", x, y);
}
}
在Java 16中,只需要简洁的如下定义:
record Point(int x, int y) { }
默认情况下对JDK内部进行强封装
默认情况下,强烈封装JDK的所有内部元素,除了关键的内部api,如sun.misc.Unsafe。允许最终用户选择宽松的强封装,这是自JDK 9以来的默认封装。提高了JDK的安全性和可维护性。
Sealed Classes
使用密封的类和接口增强Java编程语言。密封的类和接口限制了其他类或接口可以扩展或实现它们。
public abstract sealed class SealedHuman permits Student, Teacher {
protected final String name;
public abstract void speak();
public SealedHuman(String name) {
this.name = name;
}
}
public final class Student extends SealedHuman {
public Student(String name) {
super(name);
}
public void speak() {
System.out.println("student name:" + name);
}
public void study() {
System.out.println(name +" is studying");
}
}
public final class Teacher extends SealedHuman {
public Teacher(String name) {
super(name);
}
public void speak() {
System.out.println("Teacher name:" + name);
}
public void teach() {
System.out.println(name +"is teache");
}
}
提前尝试Java 16新特性,关注如下公众号,添加作者获取Java 16安装包和官方指导文档。

官方正式发布 Java 16的更多相关文章
- Java 16 新功能介绍
点赞再看,动力无限.Hello world : ) 微信搜「程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 程序猿阿朗博客 已经收录,有很多知识点和系列文章. Ja ...
- MD5、SHA1加密java 16位32位
MD5.SHA1加密java 16位32位 import java.math.BigInteger; import java.security.MessageDigest; public class ...
- java 16进制与字符串直接相互转换
java 16进制与字符串直接相互转换 CreationTime--2018年7月12日09点39分 Author:Marydon 1.16进制转换成字符串 /** * 16进制直接转换成为字符串 ...
- 实战 Java 16 值类型 Record - 2. Record 的基本用法
在上一篇文章实战 Java 16 值类型 Record - 1. Record 的默认方法使用以及基于预编译生成相关字节码的底层实现中,我们详细分析了 Record 自带的属性以及方法和底层字节码与实 ...
- Java 16 中新增的 Stream 接口的一些思考
这里先提一个题外话,如果想看 JDK 不同版本之间有何差异,增加或者删除了哪些 API,可以通过下面这个链接查看: https://javaalmanac.io/jdk/17/apidiff/11/ ...
- JEP解读与尝鲜系列4 - Java 16 中对于 Project Valhalla 的铺垫
这是 JEP 解读与尝鲜系列的第 4 篇,之前的文章如下: JEP解读与尝鲜系列 1 - Java Valhalla与Java Inline class JEP解读与尝鲜系列 2 - JEP 142 ...
- Java 16 新特性:instanceof增强
instanceof这个关键词,主要用来判断某个对象是不是某个类的实例. 比如,有时候我们要处理一个类似这样的数据集: Map<String, Object> data = new Has ...
- Java 16 新特性:record类
以前我们定义类都是用class关键词,但从Java 16开始,我们将多一个关键词record,它也可以用来定义类.record关键词的引入,主要是为了提供一种更为简洁.紧凑的final类的定义方式. ...
- _00019 Storm架构介绍和Storm获取案例(简单的官方网站Java案例)
博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...
随机推荐
- 6. Connection has already been closed 数据库连接被关闭
生产上Tomcat出现 Connection has already been closed.问题,但是在uat测试是好的! 遇见两次: 1.某个程序dao中执行逻辑异常复杂,有时候需要执行一分多钟, ...
- ysoserial Commons Collections1反序列化研究
Apache Commons Collections1反序列化研究 环境准备 Apache Commons Collections 3.1版本 IDEA 需要一些java基础,反射.类对象.Class ...
- 2021-2-17:Java HashMap 的中 key 的哈希值是如何计算的,为何这么计算?
首先,我们知道 HashMap 的底层实现是开放地址法 + 链地址法的方式来实现. 即数组 + 链表的实现方式,通过计算哈希值,找到数组对应的位置,如果已存在元素,就加到这个位置的链表上.在 Java ...
- soft tab
soft tab hard-tabs 是硬件 tab,就是按一个 tab 键; soft-tabs 是软件 tab,通过按 4个 space 键实现; refs Tabs vs. Spaces, FR ...
- 24 Days Of JavaScript mas
24 Days Of JavaScript mas Level up your JavaScript skills with a daily coding challenge from Decembe ...
- js useful skills blogs
js useful skills blogs blogs https://davidwalsh.name/tutorials/javascript https://www.ruanyifeng.com ...
- fetch & form-data & upload & image file
fetch & form-data & upload & image file no need multipart/form-data https://blog.xinshan ...
- 配置伪分布模式下的hadoop以及采用fuse-dfs来访问HDFS
实验目标 配置环境的主要目的是得到HDFS的客户端fuse-dfs的IO性能.本来的服务器上没有任何环境,因此安装均是从无到有的.系统是Ubuntu server 14.04 amd64.整个过程参考 ...
- 鸿蒙js开发7 鸿蒙分组列表和弹出menu菜单
鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口]目录:1.鸿蒙视图效果2.js业务数据和事件3.页面视图代码4.跳转页面后的视图层5.js业务逻辑部分6.<鸿蒙js开发& ...
- window.onresize绑定事件以及解绑事件
问题描述 在Vue工程中,添加样式,部分需要做到自适应,需要添加resize事件,由于是单页面应用,如果组件初始化的时候绑定事件,在切换页面的时候不去注销事件,如果来回切换,会让resize事件执行多 ...