开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
一起谈谈 Java 9 的新特性 - 技术翻译 - 开源中国社区

一起谈谈 Java 9 的新特性 【已翻译100%】

标签: <无>
oschina 推荐于 10个月前 (共 14 段, 翻译完成于 08-02) 评论 42
收藏  
65
推荐标签: 待读

在前一篇博客里,我们探讨了Java 8 新增的功能特性。

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

你也许已经听到 Java 9 的模块化系统,不过,新版本中还有更多新功能特性。在这篇博客里,我们将试图介绍其中的一部分。

你可以从这儿下载 JDK 9 的 EA(早期体验版)。

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

几点人
 翻译得不错哦!

Java 9 REPL(JShell)

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

anmol:\>jshell
 Welcome to JShell -- Version 9-ea
 For an introduction type: /help intro

jshell> System.out.println("Hi All")
 Hi All

不需要 `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)模式,这使得它真正易用:

URI newURI = new URI("http://localhost:8080");
HttpRequest request = HttpRequest.create(newURI).GET();
HttpResponse response = request.response();
String responseBody = response.body(HttpResponse.asString());

边城
 翻译得不错哦!

Java 9 模块 (Jigsaw 项目)

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

  • 模块化 JDK

  • 模块化 Java 源代码

  • 模块化运行时映像

  • Java API 的内部封装

  • Java 平台模块化系统

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

边城
 翻译得不错哦!

模块系统看起来有点像:

module java9 {
    exports;

    requires;
}

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

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

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

边城
 翻译得不错哦!

改进的进程 API

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

进程 API 中的两个新接口:

  • java.lang.ProcessHandle

  • java.lang.ProcessHandle.Info

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

System.out.println(" Required PID is " + Process.getCurrentPid());
边城
 翻译得不错哦!

轻量级的 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’ 关键字写私有方法和私有静态方法了。

边城
 翻译得不错哦!

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

public interface Employee{

    private Long createEmployeeID(){
        // Method implementation goes here.
    }

    private static void displayEmployeeDetails(){
        // Method implementation goes here.
    }
}

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

边城
 翻译得不错哦!
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们
评论(42)
Ctrl/CMD+Enter

各种语言都越来越像Javascript了
对于还在用jdk4的,公司,我只能说,去死吧
其实我想看最后的那几个改进。。。

引用来自“w8514123”的评论

对于还在用jdk4的,公司,我只能说,去死吧
jdk7的都觉得过时
有几个功能在开发中还是很实用的
满满的scala味道,不过我已上了scala的航空母舰
2000年开始 asp -> php 2.0 -> jdk 1.2 -> php 3,4,5 -> jdk 1.5,1.6 -> php 7.0 -> jdk 1.8 -> php 7.2 + jdk 1.8 (phalcon + spring boot /cloud) 至今。
java的新版本发布速度,几乎是主流语言里最慢的。。。

引用来自“子矜”的评论

各种语言都越来越像Javascript了
有同感~~

引用来自“w8514123”的评论

对于还在用jdk4的,公司,我只能说,去死吧

引用来自“notreami”的评论

jdk7的都觉得过时
还只会用JDK5语法
哈哈,加油。
看起来蛮不错的,期待

引用来自“爱喝貓的咖啡”的评论

java的新版本发布速度,几乎是主流语言里最慢的。。。
一年一个已经不错了。再说这么大的用户群,也不可能说改就改

引用来自“子矜”的评论

各种语言都越来越像Javascript了

引用来自“竹隐江南”的评论

有同感~~
燃鹅,js也越来越不像js了,相互借鉴吧,总比闭门造车好的多
好厉害,就快赶上 .net4.5 了。
支持响应式流 不错诶
分分钟四不像。众语言奔向大同

引用来自“子矜”的评论

各种语言都越来越像Javascript了

引用来自“竹隐江南”的评论

有同感~~

引用来自“zqq90”的评论

燃鹅,js也越来越不像js了,相互借鉴吧,总比闭门造车好的多
en ,最后就天下一统。
快把真泛型加上吧.
工具加强版本?
顶部