美国上市公司,专注Java培训22年

一起谈谈 Java 9 的新特性


Java 8 发布已经三年多了,下一个版本现在已经整装待发了,暂定发布日期是2017年9月21日。

【一起谈谈Java 9 的新特性】

你也许已经听到 Java 9 的模块化系统,不过,新版本中还有更多新功能特性。

【一起谈谈Java 9 的新特性】

好了,不要再浪费时间了,我们开始介绍吧!

Java 9 REPL(JShell)

Oracle 介绍过一个名为“JShell”的新工具。它表示 Java Shell,是大家熟知的 REPL (读取-执行-打印-循环) 形式。它用于执行和测试 Java 的语言结构,比如类、接口、枚举、对象、语句等,非常简单。很多语言都实现了读取-执行-打开-循环的交互形式,现在 Java 也是其中一员了。REPL/JShell 看起来像这样:

【一起谈谈Java 9 的新特性】

不需要 `public static void main(String[] args)`。酷吧?

HTTP 2.0 客户端

Java 9 会完全支持 HTTP 2.0 并带来新的 HTTP 客户端,它会代替 HttpURLConnection —— 同时还会实现 HTTP 2.0 和 Web Socket。

新的 API 在 java.net.http 包中。

这个 API 使用创建者(Builder)模式,这使得它真正易用:

【一起谈谈Java 9 的新特性】

Java 9 模块 (Jigsaw 项目)

Java 9 特性的大变动之一是模块系统。Oracle 把它作为 Jigsaw 项目的一部分。

模块化 JDK

模块化 Java 源代码

模块化运行时映像

Java API 的内部封装

Java 平台模块化系统

它们的主要目标之一是提供模块化的 JVM,使之可以在内存有限的设备上运行。JVM 可以只运行那些应用程序需要的模块和 API。

模块系统看起来有点像:

【一起谈谈Java 9 的新特性】

模块化的 JAR 文件包含一个额外的模块描述符。在这个模块描述符中,通过`requires` 语句表示对其它模块的依赖。

此外,`exports` 语句控制哪些包可以被其它模块访问。

你可以在这里了解更多关于 Jigsaw 的信息。

改进的进程 API

Java SE 9 带来一些进程 API 的改进。它们添加了一些新的类和方法,来简化控制和管理 OS 进程。

进程 API 中的两个新接口:

java.lang.ProcessHandle

java.lang.ProcessHandle.Info

这一更新可以扩展 Java 与操作系统交互的能力:新的定位方法用于处理 PID,进程名称和状态,并可以枚举 JVM、进程等。比如,在 Linux 中检索 PID 的代码会像这样:

【一起谈谈Java 9 的新特性】

轻量级的 JSON API

Java 9 带来一个轻量级的 API,用于通过 JSON(JavaScriopt 对象符号) 数据交换格式处理和生成文件以及数据流,JSON 是基于 JavaScript 的子集,用来代替 XML。

这个 API 的主要目标如下:

解析和生成 JSON。

满足 Java 开发者使用 JSON 的功能性需求。

解析 API 可以选择标记流,事件(包括文件层次结构)流,或不可变树的方式来呈现文档或数据流视图。

用于紧凑配置和 Java ME 的 API 子集。

使用创建者模式 API 构造不可变的树型结构。

生成器风格 API,用于输出 JSON 数组流和 JSON “文本”。

一个转换 API,将已有的树形值输入转换成另一个树形值输出。

预计 JEP 会把它作为 java.util 的子包交付,至少包含 4 个模块:事件、流、树和生成器。预期不会修改现有的模块、包或类。预计 JSON API 不会依赖 Java 基础模块之外的模块。

智能 Java 编译 (第 2 阶段)

智能 Java 编译项目指在改进 sjavac (Java 编程语言编辑器) 工具,使它能默认用于 JDK 构建,并普遍用于其它 JDK 之外的大项目构建。

由于稳定性和便捷性相关的各种问题,sjavac 并未默认用于 JDK 构建脚本。这一 JEP 的首要目标是解决这些问题。这需要确保这一工具在所有软件/硬件配置上产生可靠的结果。

总体目录是提升 sjavac 的质量,使它可以像常规的 javac 封装那样能够编译任何大型 Java 项目。

私有接口方法

从 Java 8 开始可以在接口中实现默认方法和静态方法。然后我们不能在接口中创建私有方法。

为了避免冗余代码并提高可重用性,Oracle 计划在 Java SE 9 的接口中引入私有方法。从 Java SE 9 开始可以在接口中使用 ‘private’ 关键字写私有方法和私有静态方法了。

私有方法可以是静态的,这样它属于接口。非静态的私有方法可以由实现接口的实例调用,但只能是在接口中。

【一起谈谈Java 9 的新特性】

如果你使用默认方法开发 API,那么私有方法在代码结构方面对其实现会很有帮助。

响应式流

最近,响应式编程由于其带来的好处,在应用程序开发中非常流行。Scala、Play、Akka 等都已经整合了响应流,受益匪浅。Oracle 也在 Java SE 9 中引入了响应式流的 API。

java.util.concurrent.Flow 类封装了以下四个接口:

Flow.Processor

Flow.Publisher

Flow.Subscriber

Flow.Subscription

这些接口支持响应式流的发布-订阅框架。Java 9 还支持一个工具类:SubmissionPublisher。发布者产生若干事项由订阅者消费。而订阅者通过订阅进行管理。订阅连接了发布者和订阅者。

多分辨率图像 API

在 Java SE 9 中,Oracle 会引入新的多分辨率图像API。MultiResolutionImage 是这个 API 的重要接口。

MultiResolutionImage 封装一组不同高度和宽度和图像(也就是不同分辨率)并允许我们根据自己的需要进行查询。

简单地说,这个新的 API 允许把一组不同分辨率(宽度和高度)的图像封装到一个图像中。

新的 API 定义在 java.awt.image 包中,可以帮助我们:

把多个不同分辨率的图像作为变体封装在一个图像中。

获取所有图像变体。

获得一个特定分辨率的图像变体 - 这是根据给定的 DPI 度量来表示指定大小的逻辑图像的最佳变体。

Java 9 提供的 MultiResolutionImage 接口有两个重要的方法:

getResolutionVariant(): 返回一个图像

getResolutionVariants(): 返回图像列表

【一起谈谈Java 9 的新特性】

除了这些功能,还有一些随 Java 9 发布的特性/改进,比如:

改进 GC (垃圾回收)

HTML5 Javadocs

改进 Stream(流) API

增强 @Deprecated 注解

改进 Optional 类

改进 CompletableFuture API

该说的都说了,所有这些功能都计划加入 Java 9 更新,但我们并不能保证它们一定会随 Java 发布。所以,对 Java 9 拭目以待。

感谢大家阅读“一起谈谈 Java 9 的新特性”本文由java培训机构小编转载自网络,版权归原作者所有,旨在分享提供阅读,更多精彩内容请关注Java培训官网


【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!

Java开发高端课程免费试学

大咖讲师+项目实战全面提升你的职场竞争力

  • 海量实战教程
  • 1V1答疑解惑
  • 行业动态分析
  • 大神学习路径图

相关推荐

更多
  • java语言中,char 类型变量是否能保存一个汉字?
    java语言中,char 类型变量是否能保存一个汉字?
    在 Java 语言中,可以使用 char 类型的变量来存储单个的字符,请问是否能用 char 类型的变量来存储一个汉字呢? 详情>>

    2015-10-15

  • 有史以来最牛的一张程序员职业路线图!
    有史以来最牛的一张程序员职业路线图!
    最近在琢磨程序员到底路在何方,经过不断的自虐和代入,终于在迷雾森林中得图一张,看之豁然开朗。独乐乐不如众乐乐,share了: 详情>>

    2018-05-22

  • java中变量和常量有什么区别?
    java中变量和常量有什么区别?
    在使用 Java 语言进行程序设计时,经常需要用到常量和变量来存储信息。请简单叙述变量和常量有什么区别? 详情>>

    2015-10-15

  • short 和 char 类型的取值范围各是多少?
    short 和 char 类型的取值范围各是多少?
    在使用 Java 语言进行程序设计时,经常需要使用 short 型和 char 型存储数值,请简述short 型和 char 型的取值范围各是多少? 详情>>

    2015-10-15

  • Java开班时间

    收起