2017年,Java迎来了第22岁的生日,同时迎来了Java9,在Java9中迎来了新的特性。平台级模块化(Modular)
在Java9中最大的一个特性就是模块化(Modular),为什么加入了模块化?
1、优化性能
在以前的版本中在JVM启动的时候,JVM需要加载rt.jar,这个庞然大物在JDK8中就有60MB以上,无论是否需要用到其中所有的类都需要先将这60M通过类加载器加载到内存,非常霸道的吃掉内存。新的特性模块化可以根据实际的模块需要加载指定的class。重构和安全性
当系统足够的庞大和代码量足够大的情况下,无法清晰的梳理系统整体结构以及代码权限上的控制,引入了模块化后,将从更高的高度和深度上对系统和平台进行有效的重构和安全性的控制。轻量级
以后的安装部署是按照模块的按需定制,使部署更加的轻量级和优雅。
具体模块化的使用通过模块之间的相互依赖进行共建,通过exports和requires进行导出和依赖别的模块,这些内容将会被写入到一个文件“module-info.java”中:
代码清单1:
module myapp{
requires java.sql;
exports cn.itsources.edu;
}JLink工具
JLink工具是为第一个特性模块化而服务的,使用了模块化后在安装部署应用的时候通过JLink工具进行打包安装到目标服务器,这样打包的应用结果非常清晰,而且体积小,按需加载JDK相关资源而不是全部加载实现最小化运行。JShell/Kulla
JShell/Kulla项目是第一个官方的Java REPL (Read-Eval-Print-Loop的缩写,即交互式编程环境),是一种命令行工具,它允许你无需使用类或者方法包装来执行Java语句,可以直接通过命令行启动、输入、执行Java代码。
图片1.png (94.48 KB, 下载次数: 224)
2017-6-21 14:42 上传
改进的Javadoc
改进的Javadoc可以直接在每个页面中直接使用搜索功能,并且搜索到的内容都包含有关JDK模块类或接口来源的信息,同时输出的内容还兼容HTML5标准。
图片2.png (283.35 KB, 下载次数: 463)
2017-6-21 14:42 上传
集合工厂方法
在JDK9以前对集合的操作,通常是先实例化集合容器,然后通过add方法添加元素对象,添加多个元素对象需要执行多次add方法。在新的Java9中添加了新的集合工厂方法,通过调用提供的静态方法可以快速高效的操作容器:
图片3.png (9.56 KB, 下载次数: 171)
2017-6-21 14:42 上传
改进的Stream
Stream 接口中添加了 4 个新的方法:dropWhile, takeWhile, ofNullable。还有个 iterate 方法的新重载方法,
可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代:
图片4.png (6.61 KB, 下载次数: 208)
2017-6-21 14:42 上传
第二个参数是一个Lambda,它会在当前IntStream中的元素到达100的时候返回 true。因此这个简单的示例是向控制台打印 1到 99。除了对Stream本身的扩展,Optional和Stream之间的结合也得到了改进。现在可以通过Optional的新方法stream()将一个Optional对象转换为一个(可能是空的) Stream对象。
图片5.png (5.45 KB, 下载次数: 195)
2017-6-21 14:42 上传
私有接口方法
Java 8为我们带来了接口的默认方法。接口现在也可以包含行为,而不仅仅是方法签名。但是,如果在接口上有几个默认方法,代码几乎相同,会发生什么情况?通常,将重构这些方法,调用一个可复用的私有方法。但默认方法不能是私有的。将复用代码创建为一个默认方法不是一个解决方案,因为该辅助方法会成为公共API的一部分。使用 Java 9,可以向接口添加私有辅助方法来解决此问题:
图片6.png (30.35 KB, 下载次数: 195)
2017-6-21 14:42 上传
多版本兼容JAR
当在项目中需要对多JAR版本支持的时候,在后期是一件很不好操作的一件事情,在Java9中多版本兼容 JAR功能允许在特定版本的Java环境中运行库程序时选择使用的class 版本。简化进程API
Java控制与管理系统进程的能力是有限的。举个例子,Java9之前为了简便获取程序的进程PID,你要么调用本地程序要么使用一些变通方案,在Java9中可以直接:
图片7.png (1.08 KB, 下载次数: 260)
2017-6-21 14:42 上传
钱和货币的API
在Java 8引进了日期和时间的API之后, Java 9引入了新的货币API,用以表示货币,支持币种之间的转换和各种复杂运算。轻量化JSON API
在Java9中将直接提供对JSON数据处理的API。HTTP/2和WebSocket的支持
Java 9中有新的方式来处理HTTP调用。这个迟到的特性用于代替老旧的HttpURLConnection API,并提供对 WebSocket和HTTP/2 的支持。注意:新的 HttpClient API在Java 9 中以所谓的孵化器模块交付。