java9新特性

java9

java9 Download 官网地址

REPL(Read Eval Print Loop) 交互式解释器环境之 jshell

java9新特性

模块化(Project Jigsaw)

模块化是java 9最大的一个特性,它使得代码组织上更安全,因为它可以指定哪些部分可以暴露,哪些部分隐藏

java9新特性

1. idea支持

2017.3支持(据说2017.1以后的版本就可以支持了)

2. 简单demo

  1. 从hello world开始 新建java项目,并在包下添加module-info.java

java9新特性

  1. 新建模块second,并暴露出对应包

java9新特性

  1. 在模块first中引用模块second

java9新特性

java9新特性

3. 对比osgi

  • 总体来说,初次体验jigsaw感觉要优于OSGi
  • jigsaw不需要第三方运行环境,对于开发者来说要比OSGi更友好
  • jigsaw自带解决传递依赖的工具
  • jigsaw在编译期就能处理模块间的依赖,而不像OSGi需要到运行时才报模块依赖问题。主要还是第二点:jigsaw不需要第三方运行环境
  • jigsaw是否可以动态选择实现,需要进一步证实)

4. 对比当下互联网环境

  • 对于互联网,现在分布式盛行,基本基于进程/服务为单位,针对与此,“模块化”显得有点鸡肋;
  • 对于进程内的应用,如果需要模块级的独立生命周期热部署和模块管理,可以考虑采用OSGI/Jigsaw,但是,容器内基于本地进程间通信的模块交付方式不仅能提供同样的独立生命热部署和模块管理,而且具备随时脱离出去部署成单独容器级服务应用的能力,加速进程间的服务交付提供的整体管理和监视环境基础. 如一些嵌入式点基于jvm车载导航,android等

增强了 Steam API

Java 的 Steam 让开发者能够快速运算,从而能够有效的利用数据并行计算。Java 8 提供的 Steam 能力能够利用多核架构实现声明式的数据处理。 在 Java 9 中,Stream API 通过新增方法, 实现有限制的从 Stream 中添加或者移除元素,遍历 Stream 中的元素,以及通过扩展 Java SE API 集合实现从空值创建流的功能。

  1. stream新增接口
    • default Stream<T> dropWhile(Predicate<? super T> predicate)
    • default Stream<T> takeWhile(Predicate<? super T> predicate)
    • static <T> Stream<T> ofNullable(T t)
    • static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)
  • 对于有序流,dropWhile()方法返回流的元素,从指定predicate为true的起始处丢弃元素。对于无序流,dropWhile()方法的行为是非确定性的。它可以选择删除匹配predicate的任何元素子集。当前的实现从匹配元素开始丢弃匹配元素,直到找到不匹配的元素。
  • takeWhile()方法的工作方式与dropWhile()方法相同,只不过它从流的起始处返回匹配的元素,而丢弃其余的。
  • 如果元素为非空,则Nullable(T t)方法返回包含指定元素的单个元素的流。如果指定的元素为空,则返回一个空的流。
  • 新的iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)方法允许使用初始种子值创建顺序(可能是无限)流,并迭代应用指定的下一个方法。当指定的hasNext的predicate返回false时,迭代停止。
  1. 新的收集器
  • <T,A,R> Collector<T,?,R> filtering(Predicate<? super T> predicate, Collector<? super T,A,R> downstream)

  • <T,U,A,R> Collector<T,?,R> flatMapping(Function<? super T,? extends Stream<? extends U>> mapper, Collector<? super U,A,R> downstream)

  • filtering()方法返回在收集元素之前应用过滤器的收集器。 如果指定的predicate对于元素返回true,则会收集元素; 否则,元素未被收集。

  • flatMapping()方法返回在收集元素之前应用扁平映射方法的收集器。 指定的扁平映射方法被应用到流的每个元素,并且从扁平映射器(flat mapper)返回的流的元素的累积。

  1. 实例 stream 示例

其它改动

  • 改进的 Java 9 代码编译
  • Java 9 支持代码缓存的分割
  • Java 9 引入 HTTP/2 客户端 API
  • Java 9 新增 DTLS 安全 API
  • java9 G1作为默认的垃圾收集器
  • 轻量级JSON API

问题

  1. 知道了module-info.java的作用了,那package-info.java干什么用?

其它

参考资料

  1. openjdk9 Featureswhat‘s new in java9 官网地址
  2. stream 示例

转载于:https://my.oschina.net/yuzn/blog/1570316