面试官问我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 等方法
平台日志 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 对 象
- 方法句柄从 Java7 开始引入 , Java9 在类java.lang.invoke.MethodHandles 中新增了更多的静态方法来创建不同类型的方法句柄
- 接口私有方法 :Java 9 允许在接口中使用私有方法
- try-with-resources 增强 :在 try-with-resources 语句中可以使用 effectively-final 变量(什么是 effectively-final 变量 , 见这篇文章 )
- 类 CompletableFuture 中增加了几个新的方法(completeAsync, orTimeout 等)
- Nashorn 引擎的增强 :Nashorn 从 Java8 开始引入的 JavaScript 引擎 , Java9 对 Nashorn 做了些增强 , 实现了一些 ES6 的新特性
推荐阅读
- Java学习:Java学习到什么程度可以进行面试
- 程序员面试金典17.05_go_字母与数字
- 安卓春招面经:二本渣院面试网易被拒,最终获腾讯阿里offer
- 「6」进大厂必须掌握的面试题-Hibernate
- 震惊!京东T4大佬面试整整三个月,才写了两份java面试笔记
- 安卓面试必备的JVM虚拟机制详解,看完之后简历上多一个技能
- 面试官问:MySQL 的自增 ID 用完了,怎么办?
- 「3」Java面试-Servlet
- 大数据hbase面试宝典(三)
- 北大英华大数据面试题