JDK 1.9 新特性有哪些

发布时间:2021-12-17 11:52:55 作者:小新
来源:亿速云 阅读:285

JDK 1.9 新特性有哪些

Java Development Kit (JDK) 1.9,也被称为Java 9,于2017年9月发布。这是Java平台的一个重要版本,引入了许多新特性和改进。本文将详细介绍JDK 1.9的主要新特性,帮助开发者更好地理解和应用这些新功能。

1. 模块化系统(Jigsaw项目)

1.1 模块化概述

Java 9引入了模块化系统,这是Java平台的一个重大变革。模块化系统允许开发者将应用程序和库分解为模块,每个模块都有自己的依赖关系和访问控制。模块化系统的主要目标是提高Java平台的可维护性、安全性和性能。

1.2 模块描述符

模块描述符是一个名为module-info.java的文件,用于定义模块的名称、依赖关系和导出的包。例如:

module com.example.myapp {
    requires java.base;
    requires java.sql;
    exports com.example.myapp.api;
}

1.3 模块路径

Java 9引入了模块路径(--module-path),用于指定模块的位置。与类路径(-classpath)不同,模块路径只包含模块化的JAR文件。

1.4 模块化JDK

JDK本身也被模块化,分为多个模块,如java.basejava.sql等。开发者可以根据需要选择性地使用这些模块,从而减少应用程序的大小。

2. JShell(REPL工具)

2.1 JShell概述

JShell是Java 9引入的一个交互式编程工具,类似于Python的REPL(Read-Eval-Print Loop)。开发者可以在命令行中直接输入Java代码并立即看到结果,非常适合快速测试和调试代码片段。

2.2 使用JShell

启动JShell非常简单,只需在命令行中输入jshell即可。例如:

$ jshell
|  欢迎使用 JShell -- 版本 9
|  要获得帮助,请输入 /help

jshell> int x = 10;
x ==> 10

jshell> System.out.println(x);
10

2.3 JShell命令

JShell提供了一些内置命令,如/help/list/vars等,用于查看和管理当前的代码片段和变量。

3. 改进的Stream API

3.1 takeWhile和dropWhile

Java 9为Stream API增加了takeWhiledropWhile方法,用于根据条件截取流中的元素。

例如:

List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9);
List<Integer> result = numbers.stream()
    .takeWhile(n -> n < 5)
    .collect(Collectors.toList());
// result: [1, 2, 3, 4]

3.2 ofNullable

ofNullable方法用于创建一个包含单个元素的流,如果元素为null,则返回一个空流。

Stream<String> stream = Stream.ofNullable(null);
// stream: empty stream

3.3 iterate

iterate方法现在支持一个终止条件,用于生成有限流。

Stream.iterate(0, n -> n < 10, n -> n + 1)
    .forEach(System.out::println);
// 输出: 0 1 2 3 4 5 6 7 8 9

4. 改进的集合工厂方法

4.1 不可变集合

Java 9引入了一些新的工厂方法,用于创建不可变的集合(List、Set、Map)。这些方法使用of关键字,并且返回的集合是不可变的。

List<String> list = List.of("a", "b", "c");
Set<String> set = Set.of("a", "b", "c");
Map<String, Integer> map = Map.of("a", 1, "b", 2, "c", 3);

4.2 不可变集合的特点

5. 改进的进程API

5.1 ProcessHandle

Java 9引入了ProcessHandle类,用于管理和监控操作系统进程。开发者可以获取当前进程的信息,如进程ID、父进程、子进程等。

ProcessHandle currentProcess = ProcessHandle.current();
System.out.println("Process ID: " + currentProcess.pid());
System.out.println("Is alive: " + currentProcess.isAlive());

5.2 ProcessHandle.Info

ProcessHandle.Info类提供了进程的详细信息,如启动时间、CPU时间、命令行参数等。

ProcessHandle.Info info = currentProcess.info();
System.out.println("Command: " + info.command().orElse(""));
System.out.println("Arguments: " + info.arguments().orElse(new String[]{}));

6. 改进的CompletableFuture API

6.1 delayedExecutor

CompletableFuture新增了delayedExecutor方法,用于创建一个延迟执行的执行器。

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Hello", 
    CompletableFuture.delayedExecutor(1, TimeUnit.SECONDS));

6.2 completeOnTimeout

completeOnTimeout方法用于在超时后完成CompletableFuture

CompletableFuture<String> future = new CompletableFuture<>();
future.completeOnTimeout("Timeout", 1, TimeUnit.SECONDS);

7. 改进的Optional类

7.1 ifPresentOrElse

ifPresentOrElse方法用于在Optional有值时执行一个操作,否则执行另一个操作。

Optional<String> optional = Optional.of("Hello");
optional.ifPresentOrElse(
    value -> System.out.println("Value: " + value),
    () -> System.out.println("No value")
);

7.2 or

or方法用于在Optional为空时返回另一个Optional

Optional<String> optional = Optional.empty();
Optional<String> result = optional.or(() -> Optional.of("Default"));

8. 改进的HTTP/2客户端

8.1 HTTP/2概述

Java 9引入了一个新的HTTP/2客户端API,支持HTTP/2和WebSocket协议。这个API位于java.net.http包中,提供了更简洁和灵活的HTTP请求处理方式。

8.2 使用HTTP/2客户端

以下是一个简单的HTTP GET请求示例:

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://example.com"))
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());

8.3 异步请求

HTTP/2客户端还支持异步请求,使用sendAsync方法。

CompletableFuture<HttpResponse<String>> future = client.sendAsync(request, HttpResponse.BodyHandlers.ofString());
future.thenAccept(response -> System.out.println(response.body()));

9. 改进的Javadoc

9.1 搜索功能

Java 9的Javadoc工具增加了搜索功能,开发者可以在生成的文档中搜索类、方法、字段等。

9.2 HTML5支持

Javadoc现在支持生成HTML5格式的文档,提供了更好的兼容性和可读性。

10. 改进的G1垃圾回收器

10.1 并行Full GC

Java 9改进了G1垃圾回收器,使其在Full GC时能够并行执行,从而减少了停顿时间。

10.2 默认垃圾回收器

从Java 9开始,G1垃圾回收器成为默认的垃圾回收器,取代了之前的Parallel GC。

11. 改进的JVM日志系统

11.1 统一日志系统

Java 9引入了一个统一的JVM日志系统,允许开发者通过命令行参数配置日志输出。

11.2 日志级别

开发者可以设置不同的日志级别,如infodebugtrace等,以控制日志的详细程度。

12. 改进的编译器性能

12.1 分层编译

Java 9改进了JIT编译器的分层编译策略,使得应用程序在启动时能够更快地达到最佳性能。

12.2 AOT编译

Java 9引入了AOT(Ahead-of-Time)编译,允许开发者将Java代码预先编译为本地机器码,从而减少启动时间。

13. 改进的安全性

13.1 TLS 1.3

Java 9支持TLS 1.3协议,提供了更高的安全性和性能。

13.2 改进的加密算法

Java 9增加了对更多加密算法的支持,如SHA-3、EdDSA等。

14. 其他改进

14.1 改进的注解处理器

Java 9改进了注解处理器,使其能够更好地处理模块化系统中的注解。

14.2 改进的国际化支持

Java 9增加了对更多语言和地区的支持,提供了更好的国际化体验。

14.3 改进的日期时间API

Java 9对java.time包进行了一些小的改进,如增加了LocalDate.datesUntil方法。

结论

JDK 1.9引入了许多新特性和改进,涵盖了模块化系统、交互式编程工具、Stream API、集合工厂方法、进程API、CompletableFuture API、Optional类、HTTP/2客户端、Javadoc、垃圾回收器、JVM日志系统、编译器性能、安全性等方面。这些新特性不仅提高了Java平台的可维护性、安全性和性能,还为开发者提供了更多的工具和灵活性,使得Java编程更加高效和便捷。

通过本文的介绍,开发者可以更好地理解和应用JDK 1.9的新特性,从而提升自己的开发效率和代码质量。希望本文对您有所帮助,祝您在Java编程的道路上越走越远!

推荐阅读:
  1. JDK11 | 第一篇 : JDK11 介绍
  2. jdk8有什么新特性

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

jdk

上一篇:Windows 10中如何安装Spark2.1

下一篇:python匿名函数怎么创建

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》