首页 > 其他分享 >JDK9优化了哪些功能以及新增了哪些特性功能|JDK各个版本的特性分析

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

时间:2023-09-25 17:05:40浏览次数:56  
标签:Java JDK 示例 void 哪些 List 特性 API


一、前言

我们现在大部分公司都在使用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 one rror(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 进行了改进,添加了例如 takeWhiledropWhileofNullable 等新方法。

示例:

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,JDK,示例,void,哪些,List,特性,API
From: https://blog.51cto.com/u_15430531/7597260

相关文章

  • 高压放大器在互感器中的应用有哪些
    高压放大器是一种常用的电子元件,广泛应用于各种领域。在互感器中,高压放大器可以起到信号放大的作用,提高信号的强度和稳定性。下面西安安泰将详细介绍高压放大器在互感器中的应用。一、互感器是什么互感器是一种电气元件,主要用于测量和变换高电压和高电流信号。它通过在......
  • 企业sdwan组网要求:企业使用SD-WAN组网时有哪些要求?
    在当今信息时代,企业对于网络的稳定性和高效性要求越来越高。SD-WAN(软件定义广域网)作为一种新兴的网络技术,为企业提供了更加灵活、可靠和安全的广域网解决方案。在组建企业SD-WAN网络时,有一些关键要求需要考虑。高可用性:企业SD-WAN网络需要保证高可用性,确保业务的持续性和可靠性。......
  • Java SE 21 新增特性
    JavaSE21新增特性作者:Grey原文地址:博客园:JavaSE21新增特性CSDN:JavaSE21新增特性源码源仓库:Github:java_new_features镜像仓库:GitCode:java_new_featuresRecordPatterns该功能首次在JavaSE19中预览,在JavaSE20中发布第二次预览版,在此版本中成为永久性功......
  • 第三方测评机构做软件测试的对企业有哪些收益?专业第三方测评机构收费?
    ​ 权威第三方软件测试报告第三方测评机构做软件测试的对企业有很多收益。主要有以下几点:节约人力成本:对于很多软件企业而言,由于软件的开发上线需要聘请专业的软件测试人员,但是一旦项目不饱和或者结束,这样会提高人力成本。选择第三方软件测评机构进行软件测评的话,就能完美......
  • 浅谈PCBA加工中的阻焊设计的意义有哪些
    相信从事PCBA加工行业的同事都知道PCB的阻焊设计,阻焊层在控制PCBA焊接工艺的好坏中扮演着重要的角色,合理的阻焊设计时是保证PCBA焊接的主要因素之一,在设计PCB时应尽量减小焊盘特征周围的空隙及空气间隙,不适当的PCB阻焊设计会导致PCBA加工缺陷。下面就有贴片加工厂_安徽英特丽小编为......
  • python面向对象的三大特性:封装性、继承性、多态性
    python面向对象的三大特性:封装性、继承性、多态性一、python中的封装在python代码中,封装具有两层含义:①在把现实世界中的实体中的属性和方法写到类的里面的操作即为封装。classPerson(object):#封装属性#封装方法②封装可以为属性和方法添加私有权限(属性和方......
  • PostgreSQL教程:事务的ACID特性及基本使用
    什么是ACID?在日常操作中,对于一组相关操作,通常要求要么都成功,要么都失败。在关系型数据库中,称这一组操作为事务。为了保证整体事务的安全性,有ACID这一说:原子性A:事务是一个最小的执行单位,一次事务中的操作要么都成功,要么都失败。一致性C:在事务完成时,所有数据必须保持在一致的状态。(事......
  • MySQL 的 blob 类型有哪些?
    MySQL中有两种主要的BLOB类型,用于存储二进制数据:TINYBLOB:TINYBLOB类型可以存储最多255字节的二进制数据。BLOB:BLOB类型可以存储最多65,535字节的二进制数据。此外,MySQL还有两种变体的BLOB类型,它们用于存储更大的二进制数据:MEDIUMBLOB:MEDIUMBLOB类型可以存储最多16,77......
  • Java 21 正式发布!新特性专栏继续更起来了~
    就在昨天晚间,Oracle公司宣布Java21正式发布。该版本是继JDK17之后最新的长期支持版本(LTS),将获得至少8年的支持!Java21号称具有数千项性能、稳定性和安全性改进。新的JDK21包括对15项改进的抢先体验,这些增强功能是在OracleCloudWorld2023会议上宣布的,包括支持虚拟线程以......
  • crash —— 如何知道哪些数据结构内嵌了指定的数据结构或者内嵌了指向指定数据结构的
    需求有时我们有这样的需求,比如我们知道了结构体task_struct,然后我们又想知道内核中有哪些数据结构中包含了task_struct,或者包含了指向task_struct的指针。做法用whatis-m可以做到:crash>whatis-mtask_structSIZETYPE8rcuwait16core_thread16io_......