面试官问我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 的新特性
- I/O 流的新特性 :增加了新的方法来读取和复制 InputStream 中包含的数据
- 改进应用的安全性能 :Java 9 新增了 4 个 SHA- 3 哈希算法 , SHA3-224、SHA3-256、SHA3-384 和 S HA3-512
- ......
var 关键字
- 介绍 :提供了 var 关键字声明局部变量:var list = new ArrayList(); // ArrayList
- 局限性 :只能用于带有构造器的局部变量和 for 循环中
不可变集合list , set , map 提供了静态方法copyOf()返回入参集合的一个不可变拷贝(以下为 JDK 的源码)
static List copyOf(Collection extends E> coll) {return ImmutableCollections.listCopy(coll);}
java.util.stream.Collectors中新增了静态方法 , 用于将流中的元素收集为不可变的集合
- 蛋壳公寓|官媒发声:绝不能让“割韭菜者”一跑了之!
- 表达|重磅!2021世界安防博览会官方宣贯会正式召开,百余家企业表达参展意愿
- 公司|LVMH首席数字官跳槽至加密数字钱包公司Ledger
- 成为佛山移动服务体验官 表白留言赢取百元话费
- Store|在BlueMail的App Store反垄断案中 法官作出有利于苹果公司的判决
- 正式|首批体验官正式招募!仰望高端定制,OriginOS玩法大搜罗
- 全新|首批支持5款机型,vivo开启OriginOS首批体验官招募
- 全新|OriginOS招募首批体验官,网友:先冲为敬
- 无人|无人维护?官方打脸:Element UI for Vue 3.0 来了!
- 代言人|OPPO官宣“周冬雨”成为新代言人,周冬雨排列难道会被用上?