首页 > 科技 > java jdk13新特性抢先看

java jdk13新特性抢先看

JDK 13 此版本将是Java SE平台版本13的参考实现,由Java Community Process中的JSR 388指定。

Switch表达式 (JEP 325)

Switch表达式添加了两个新功能:

引入case value -> 语法,消除了对break语句的需要。

现在我们可以将一个Switch表达式赋给变量,以将其作为方法的值返回。可以在下面的代码中看到这些新功能。

让我们从编写传统的switch语句开始,比如判断996工作上班时间的代码:

java 12及以前的

String result;
switch (dayOfWeek) {
case “星期一”:
case “星期二”:
case “星期三”:
case “星期四”:
case “星期五”:
result = "上班";
break;
case “星期六”:
result = "加班";
break;
case “星期日”:
result = "休息";
break;
default:
result = "加班!";
}
return result

使用java13新特性全新的语法,非常简单,也使用了新的语法Lamda表达式:

String result;
switch (dayOfWeek) {
case “星期一”, “星期二”, “星期三”, “星期四”, “星期五” -> result = "上班";
case “星期六” -> result = "加班";
case “星期日” -> result = "休息";
default -> result = "加班!";
}
return result;

SQL语句的变化

JDK13之前可以这样写

String query = "SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`\n" +
"WHERE `CITY` = 'INDIANAPOLIS'\n" +
"ORDER BY `EMP_ID`, `LAST_NAME`;\n";
java jdk13 写法
String query = """
SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`
WHERE `CITY` = 'INDIANAPOLIS'
ORDER BY `EMP_ID`, `LAST_NAME`;
""";

重新实现旧版套接字API

使用更简单,更现代的实现替换java.net.Socket和java.net.ServerSocketAPI 使用的底层实现,易于维护和调试。新的实
现很容易适应用户模式线程,也就是光纤,目前正在Project Loom中进行探索。

动机:

 在java.net.Socket和java.net.ServerSocketAPI,以及它们的底层实现,可以追溯到JDK 1.0。实现是遗留Java和C代
码的混合,维护和调试很痛苦。该实现使用线程堆栈作为I/O缓冲区,这种方法需要多次增加默认线程堆栈大小。该实现使用本机数据
结构来支持异步关闭,这是多年来微妙可靠性和移植问题的根源。该实现还有几个并发问题,需要进行大修才能正确解决。在未来的光
纤世界环境中,而不是在本机方法中阻塞线程,当前的实现不适用于目的。

FileSystems.newFileSystem新方法

核心库/ java.nio中添加了FileSystems.newFileSystem(Path,Map )方法

添加了三种新方法java.nio.file.FileSystems, 以便更轻松地使用将文件内容视为文件系统的文件系统提供程序。

1、new FileSystem(Path)
2、new FileSystem(Path, Map)
3、new FileSystem(Path, Map, ClassLoader)
添加为 new FileSystem(Path, Map) 已使用现有2-arg
newFileSystem(Path, ClassLoader)并指定类加载器的代码创建源(但不是二进制)兼容性问题。null.例如,由于引用new FileSystem不明确,因此无法编译以下内容:

FileSystem fs = FileSystems.newFileSystem(path, null);

为了避免模糊引用,需要修改此代码以将第二个参数强制转换为java.lang.ClassLoader。

nio新方法

核心库/ java.nio中新的java.nio.ByteBuffer批量获取/放置方法转移字节而不考虑缓冲区位置。

 java.nio.ByteBufferjava.nio现在,其他缓冲区类型定义绝对批量get和put传输连续字节序列的方法,而不考虑或影响缓冲
区位置。

,以便更轻松地使用将文件内容视为文件系统的文件系统提供程序。

1、newFileSystem(Path)
2、newFileSystem(Path, Map)
3、newFileSystem(Path, Map, ClassLoader)
添加为newFileSystem(Path, Map) 已使用现有2-arg newFileSystem(Path, ClassLoader)并指定类加载器
的代码创建源(但不是二进制)兼容性问题。null.例如,由于引用newFileSystem不明确,因此无法编译以下内容: FileSystem fs = FileSystems.newFileSystem(path, null);
为了避免模糊引用,需要修改此代码以将第二个参数强制转换为java.lang.ClassLoader。

动态CDS归档JEP 351 - Dynamic CDS(Class-Data Sharing) Archiving

CDS的功能在进化一步,就是动态CDS功能。说白了,可以在运行期间动态保存类数据,也就是所谓的归档。

应用程序class-data Sharing(AppCDS)再JDK13新版本里已经简化。 在应用程序退出时,可以动态存档类数据。 动态生成的归档文件将在与正在运行的JDK映像一起打包的默认系统归档文件上创建生成,并保存数据。

我们可以使用选项参数-XX:ArchiveClassesAtExit = 控制程序再退出时生成存档。 也可以:SharedArchiveFile = ,来使用动态存档功能。

# 创建存档文件
% bin/java -XX:ArchiveClassesAtExit=helloworld.jsa -cp helloworld.jar Hello
# 使用存档文件
% bin/java -XX:SharedArchiveFile=hello.jsa -cp helloworld.jar Hello
# 使用动态存档,在老文档基础上
% bin/java -XX:SharedArchiveFile=:helloworld.jsa -cp helloworld.jar Hello

java jdk13版本都要来临了,你还在使用jdk几?

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.sosokankan.com/article/708489.html

setTimeout(function () { fetch('http://www.sosokankan.com/stat/article.html?articleId=' + MIP.getData('articleId')) .then(function () { }) }, 3 * 1000)