面试官问我Java9~14的有哪些重要的新特性,我哭了~~~

大家好 , 我是Guide哥!这篇文章来自读者的投稿 , 经过了两次较大的改动 , 两周的完善终于完成 。
Guide 哥:别人家的特性都用了几年了 , 我 Java 才出来 , 哈哈!真实!
Java9发布于 2017 年 9 月 21 日。 作为 Java8 之后 3 年半才发布的新版本 , Java 9 带 来了很多重大的变化其中最重要的改动是 Java 平台模块系统的引入,其他还有诸如集合、Stream 流
Java 平台模块系统Java 平台模块系统 , 也就是 Project Jigsaw , 把模块化开发实践引入到了 Java 平台中 。 在引入了模块系统之后 , JDK 被重新组织成 94 个模块 。 Java 应用可以通过新增的 jlink 工具 , 创建出只包含所依赖的 JDK 模块的自定义运行时镜像 。 这样可以极大的减少 Java 运行时环境的大小 。
Java 9 模块的重要特征是在其工件(artifact)的根目录中包含了一个描述模块的 module-info.class 文 件 。工件的格式可以是传统的 JAR 文件或是 Java 9 新增的 JMOD 文件 。
Jshelljshell 是 Java 9 新增的一个实用工具 。 为 Java 提供了类似于 Python 的实时命令行交互工具 。
在 Jshell 中可以直接输入表达式并查看其执行结果
集合、Stream 和 Optional

  • 增加 了 List.of()、Set.of()、Map.of() 和 Map.ofEntries()等工厂方法来创建不可变集合 , 比如List.of("Java", "C++");、Map.of("Java", 1, "C++", 2);(这部分内容有点参考 Guava 的味道)
  • Stream 中增加了新的方法 ofNullable、dropWhile、takeWhile 和 iterate 方法 。 Collectors 中增加了新的方法 filtering 和 flatMapping
  • Optional 类中新增了 ifPresentOrElse、or 和 stream 等方法
进程 APIJava 9 增加了 ProcessHandle 接口 , 可以对原生进程进行管理 , 尤其适合于管理长时间运行的进程
平台日志 API 和服务【面试官问我Java9~14的有哪些重要的新特性,我哭了~~~】Java 9 允许为 JDK 和应用配置同样的日志实现 。 新增了 System.LoggerFinder 用来管理 JDK 使 用的日志记录器实现 。 JVM 在运行时只有一个系统范围的 LoggerFinder 实例 。
我们可以通过添加自己的 System.LoggerFinder 实现来让 JDK 和应用使用 SLF4J 等其他日志记录框架 。
反应式流 ( Reactive Streams )
  • 在 Java9 中的 java.util.concurrent.Flow 类中新增了反应式流规范的核心接口
  • Flow 中包含了 Flow.Publisher、Flow.Subscriber、Flow.Subscription 和 Flow.Processor 等 4 个核心接口 。 Java 9 还提供了SubmissionPublisher 作为Flow.Publisher 的一个实现 。
变量句柄
  • 变量句柄是一个变量或一组变量的引用 , 包括静态域 , 非静态域 , 数组元素和堆外数据结构中的组成部分等
  • 变量句柄的含义类似于已有的方法句柄MethodHandle
  • 由 Java 类java.lang.invoke.varHandle 来表示 , 可以使用类 java.lang.invoke.MethodHandles.Lookup 中的静态工厂方法来创建 VarHandle 对 象
改进方法句柄(Method Handle)
  • 方法句柄从 Java7 开始引入 , Java9 在类java.lang.invoke.MethodHandles 中新增了更多的静态方法来创建不同类型的方法句柄
其它新特性