JDK9优化了哪些功能以及新增了哪些特性功能|JDK各个版本的特性分析

简介: JDK9优化了哪些功能以及新增了哪些特性功能|JDK各个版本的特性分析

一、前言

我们现在大部分公司都在使用jdk8,jdk8的功能主要是增加了lambda 流式处理,还有优化了线程安全的时间LocalDate,这里我就先不赘述了,那jdk9相对jdk8优化了哪些功能,以及新增了哪些特性功能呢,下面一一给大家讲述一下


二、新增特性

以下是一些主要的变化和新增特性:

1. 模块化系统 (Jigsaw)

这是 JDK 9 中最重要的变化。Java 9 引入了一个名为 Jigsaw 的模块化系统,它允许将 Java 代码库划分为多个模块,并定义它们之间的依赖关系。这使得开发者可以更轻松地构建和维护大型应用程序。

示例:

module com.zygxsq.myapp {
    requires com.zygxsq.mylib;
}

2. JShell

JShell 是 Java 9 引入的一个交互式 Java REPL (Read-Eval-Print Loop) 工具,开发者可以在命令行中编写和执行 Java 代码片段,无需创建完整的 Java 类。这对于学习 Java 语言以及快速测试代码片段非常有用。

示例:


在命令行中输入 jshell 启动 JShell,然后输入以下代码:

int a = 10;
int b = 20;
int sum = a + b;
System.out.println(sum);

3. 改进的 Javadoc

JDK 9 改进了 Javadoc 工具,现在它支持生成 HTML 5 格式的文档,并添加了一个搜索框,方便开发者快速查找相关类和方法。


4. 多分辨率图像 API

Java 9 添加了一个新的多分辨率图像 API,允许开发者为不同分辨率的屏幕提供不同尺寸的图像,系统会根据屏幕分辨率自动选择合适的图像。


示例:

List<Image> images = ...
BaseMultiResolutionImage multiResImage = new BaseMultiResolutionImage(images);
Image bestImage = multiResImage.getResolutionVariant(width, height);

5. 集合工厂方法

Java 9 为 List、Set 和 Map 接口引入了一些方便的静态工厂方法,用于创建不可变的集合。

示例:

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

6. Reactive Streams API

Java 9 增加了对响应式编程的支持,添加了 java.util.concurrent.Flow 类,它定义了一组接口,用于实现异步、非阻塞的数据处理。

示例:

class MySubscriber implements Flow.Subscriber<String> {
    @Override
    public void onSubscribe(Flow.Subscription subscription) { ... }
    @Override
    public void onNext(String item) { ... }
    @Override
    public void onError(Throwable throwable) { ... }
    @Override
    public void onComplete() { ... }
}

7. 私有接口方法

Java 9 允许在接口中定义私有方法,这有助于避免接口中的代码重复。

示例:

public interface MyInterface {
    default void doSomething() {
        doCommon();
    }
    default void doAnotherThing() {
        doCommon();
    }
    private void doCommon() {
        System.out.println("Common implementation by 小小鱼儿小小林");
    }
}

好的,接下来我会介绍更多的 JDK 9 的特性和改进:

8. HTTP 2 客户端 API

在 JDK 9 中,引入了一个新的 HTTP 客户端 API,它支持 HTTP/2 协议和 WebSocket,并且在设计上考虑了 HTTP/2 的特性和需求。

示例:

HttpRequest request = HttpRequest.newBuilder()
  .uri(new URI("http://tools.zygxsq.cn/"))
  .build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());

9. 优化的 Stream API

JDK 9 对 Stream API 进行了改进,添加了例如 takeWhile、dropWhile 和 ofNullable 等新方法。

示例:

Stream<Integer> numbers = Stream.of(1, 2, 3, 4, 5);
numbers.takeWhile(n -> n < 3).forEach(System.out::println);  // 输出 1, 2

10. 改进的 try-with-resources

如果你已经有一个资源是 final 或者等效于 final 变量,你可以在 try-with-resources 语句中使用它,而无需在 try-with-resources 语句中声明一个新的变量。

示例:

MyResource res = new MyResource();
try (res) {
    res.use();
}

11. 平台日志 API 和服务

新的 API java.util.logging.PlatformLogger 提供了简单的日志记录接口,用于 JVM 和 JDK 类,以及由 Java 应用程序使用。

示例:

PlatformLogger logger = PlatformLogger.getLogger("myLogger");
logger.info("Log blog xiao xiao yu er xiao xiao lin tools.zygxsq.cn");

12. Process API 更新

JDK 9 对 Process API 进行了改进,添加了一些新的方法,用于获取进程的 PID、进程是否活动、进程的父进程等信息。

示例:

ProcessHandle processHandle = ProcessHandle.current();
System.out.println("PID: " + processHandle.pid());

13. 新的版本字符串格式

JDK 9 改变了版本字符串的格式,新的格式更加直观和易于理解。

14. jlink 工具

jlink 是一个新的命令行工具,它可以生成定制的 JRE,只包含你的应用程序需要的模块。

示例:

jlink --module-path $JAVA_HOME/jmods --add-modules java.base --output customjre

15. 便捷工厂方法创建集合

Java 9 提供了一组便捷的方法来创建集合,如 List、Set、Map 和 Map.Entry。这些方法用于创建包含少量元素的不可修改集合。

示例:

List<String> list = List.of("A", "B", "C");
Set<Integer> set = Set.of(1, 2, 3);
Map<String, Integer> map = Map.of("John", 25, "Jane", 23);

三、新的工具和命令

  1. JShell:这是一个新的命令行工具,它允许你在一个交互式环境中执行 Java 代码,非常适合学习和试验新的代码片段。
  2. jdeprscan:这是一个新的命令行工具,它扫描一个 jar 文件或者其他的类文件集合,报告哪些 API 已经被废弃,以及它们在被扫描的类文件中的使用情况。
  3. Javadoc 的 HTML5 支持:Javadoc 工具现在支持生成 HTML5 格式的文档。
  4. 改进的 JVM 诊断工具 (JCMD):在 JDK 9 中,JCMD 工具的功能得到了增强,它可以显示 Java Flight Recorder 的配置,以及对系统属性的设置。
  5. 除了这些,还有许多其他的改进,例如对 Unicode 的支持,新的编译器控制,等等。


此外,JDK 9 还包括许多其他的改进和更新,例如改进了垃圾回收器、优化了编译器、增强了安全性等。总之,JDK 9 相对于 JDK 8 带来了许多重要的变化和特性,使得 Java 开发变得更加高效和便捷。

相关文章
|
安全 Java 编译器
new出来的对象,不一定在堆上?聊聊Java虚拟机的优化技术:逃逸分析
逃逸分析是一种静态程序分析技术,用于判断对象的可见性与生命周期。它帮助即时编译器优化内存使用、降低同步开销。根据对象是否逃逸出方法或线程,分析结果分为未逃逸、方法逃逸和线程逃逸三种。基于分析结果,编译器可进行同步锁消除、标量替换和栈上分配等优化,从而提升程序性能。尽管逃逸分析计算复杂度较高,但其在热点代码中的应用为Java虚拟机带来了显著的优化效果。
449 4
|
监控 Java Unix
6个Java 工具,轻松分析定位 JVM 问题 !
本文介绍了如何使用 JDK 自带工具查看和分析 JVM 的运行情况。通过编写一段测试代码(启动 10 个死循环线程,分配大量内存),结合常用工具如 `jps`、`jinfo`、`jstat`、`jstack`、`jvisualvm` 和 `jcmd` 等,详细展示了 JVM 参数配置、内存使用、线程状态及 GC 情况的监控方法。同时指出了一些常见问题,例如参数设置错误导致的内存异常,并通过实例说明了如何排查和解决。最后附上了官方文档链接,方便进一步学习。
3513 4
|
存储 Java Go
【Java】(3)8种基本数据类型的分析、数据类型转换规则、转义字符的列举
牢记类型转换规则在脑海中将编译和运行两个阶段分开,这是两个不同的阶段,不要弄混!
474 2
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
445 1
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
|
数据采集 搜索推荐 算法
Java 大视界 -- Java 大数据在智能教育学习社区用户互动分析与社区活跃度提升中的应用(274)
本文系统阐述 Java 大数据技术在智能教育学习社区中的深度应用,涵盖数据采集架构、核心分析算法、活跃度提升策略及前沿技术探索,为教育数字化转型提供完整技术解决方案。
|
机器学习/深度学习 安全 Java
Java 大视界 -- Java 大数据在智能金融反洗钱监测与交易异常分析中的应用(224)
本文探讨 Java 大数据在智能金融反洗钱监测与交易异常分析中的应用,介绍其在数据处理、机器学习建模、实战案例及安全隐私等方面的技术方案与挑战,展现 Java 在金融风控中的强大能力。
|
Java 数据库连接 API
互联网大厂校招 JAVA 工程师笔试题解析及常见考点分析
本文深入解析互联网大厂校招Java工程师笔试题,涵盖基础知识(数据类型、流程控制)、面向对象编程(类与对象、继承与多态)、数据结构与算法(数组、链表、排序算法)、异常处理、集合框架、Java 8+新特性(Lambda表达式、Stream API)、多线程与并发、IO与NIO、数据库操作(JDBC、ORM框架MyBatis)及Spring框架基础(IoC、DI、AOP)。通过技术方案讲解与实例演示,助你掌握核心考点,提升解题能力。
623 2
Java 大视界 -- Java 大数据在智能家居能源消耗模式分析与节能策略制定中的应用(198)
简介:本文探讨Java大数据技术在智能家居能源消耗分析与节能策略中的应用。通过数据采集、存储与智能分析,构建能耗模型,挖掘用电模式,制定设备调度策略,实现节能目标。结合实际案例,展示Java大数据在智能家居节能中的关键作用。
|
人工智能 Java
Java参数传递分析
本文详细探讨了Java中参数传递的机制,明确指出Java采用的是值传递而非引用传递。通过基本数据类型(如int)和引用类型(如Map、自定义对象People)的实例测试,证明方法内部对参数的修改不会影响原始变量。即使在涉及赋值返回的操作中,表面上看似引用传递,实际仍是值传递的结果。文中结合代码示例与执行结果,深入解析了值传递的本质及容易引起混淆的情形,帮助读者准确理解Java参数传递的核心概念。
323 7