一文了解 Java 9 的新特性

Java 9 已经在 JavaOne 大会发布许久,本文将为我们梳理 Java 9 所具备的新功能。

JShell:交互式 Java REPL

很多编程语言都已经具有了交互式编程环境,如今 Java 也加入了这个具有REPL [读取、评估、打印、循环]功能的俱乐部。 交互式shell可以让你轻松完成 Java 类、接口、枚举、对象、语句等的测试任务。使用 JShell 进行测试时无需部署整个解决方案。JShell也就是Java Shell的缩写,可以在终端窗口执行JShell命令将其启动,然后就可以直接在命令行中输入并执行 java 代码了。

使用这个工具的最大好处之一是,我们可以轻松测试我们的微服务,而不需要一遍又一遍地部署它们。这有助于加速最终组件的开发、迭代和质量保证。

私有接口方法

Java 8为我们提供了接口中的默认和静态方法实现,但是,我们无法在接口中创建私有方法。如果接口中有多个默认方法包含相同功能,通常,我们会重构这些方法,调用一个可复用的私有方法。在Java 8中,你可以在接口中创建私有方法。随着 Java 9的发布,这个问题得以解决,现在我们可以向接口添加私有辅助方法来解决这种类型的问题。

public interface MyInterface {

default void interfaceDefaultMethod() { init(); }

default void interfaceSecondDefaultMethod() { init(); }

// This is the declaration of the Private Method in Interface

private void init() { ... }

}

Java 9 模块系统

Java 9最大的变化之一是引入了模块系统(Jigsaw 项目)。一直到 Java 8 版本,我们都在使用 Monolithic Jars 来设计基于 Java 语言的应用程序。这种设计有两个主要的基本问题:难以封装代码,并且系统不同部分之间缺乏明确依赖的概念。为了避免这些根本问题,Java 9 引入了模块系统。模块系统主要有如下好处:

JDK、JRE、JAR等被分割成更小的模块,我们可以只使用我们需要的模块即可。这有助于缩小小型设备应用程序的尺寸。

对封装提供强力支持。

内部 Non-Critical API 被隐藏,因为模块安全地隐藏了不需要的内部细节。这大大提高了应用程序的安全性。

改进的 Javadoc

我们一直以来都使用 Google 来搜索问题,才能找到正确的 Javadoc 页面。使用 Java 9这个问题得以解决,Javadoc 现在支持在 API 文档中的进行搜索。

HTTP/2客户端

Java 9 中有新的 HTTP/2 客户端 API 来处理 HTTP 调用。它代替了老旧的 `HttpURLConnection` API,并提供对 WebSocket 和 HTTP/2 的支持。

HttpClient newHttpClient = HttpClient.newHttpClient();

Uri uriObject = Uri.create("https://developersjournal.in");

HttpRequest request = HttpRequest.newBuilder(uriObject)

.header("User-Agent", "DJ")

.GET()

.build();

HttpResponse resp = client.send(req, HttpResponse.BodyHandler.asString());

新版字符串

Java 9 提供简化版的字符串格式,有助于清楚区分主要、次要、安全和补丁更新版本。

新版本的字符串格式符合当前的行业惯例,特别是语义版本控制(Server)。格式如下:

$MAJOR.$MINOR.$SECURITY.$PATCH

$MAJOR是主要版本增加的版本号,例如 JDK 9,其中包含由 Java SE 平台规范指定的重要新功能。主要版本包含新功能和对现有功能的更改,这些功能将提前计划和公布。

$MINOR是为每个次要更新增加的版本号,例如错误修复,标准 API 的修订,或相关平台规范范围之外的功能实现。

$SECURITY是针对安全更新版本增加的版本号,其中包含关键修复程序,包括提高安全性所需的修补程序。

$PATCH是包含已经一起测试的安全性和高优先级客户修补程序的版本的版本号。

多版本兼容 JAR

Java 9 扩展了 JAR 文件格式,以便在单个存档中共享多个 Java 版本的类文件。

多版本 JAR(MRJAR)包含针对特定 Java 平台版本的类和资源的附加版本目录。使用 jar 工具 --release 选项指定版本化目录。

改进的 Stream API

改进的 Stream API 允许对对象序列化数据的传入流进行过滤,以提高安全性和鲁棒性。

对象序列化客户端可以更容易地验证其输入,并且导出的远程方法调用(RMI)对象也可以更容易地验证调用参数。

序列化客户端实现了在 ObjectInputStream 上设置的过滤器接口。对于 RMI,通过RemoteServerRef 导出对象,该 RemoteServerRef 将 MarshalInputStream 上的过滤器设置为在未调用时验证调用参数。

一文了解 Java 9 的新特性 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,601评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,522评论 25 707
  • github: game-of-tetris 一图胜千言 缘起 群里有人问, Sublime能不能做点好玩的东西?...
    Floyda阅读 1,503评论 0 4
  • 亲爱的我 你有多久没有独处了 生活在只有自己的世界里 自娱自乐 没有那么多的纠结和痛楚 亲爱的我 你是颜色不一样的...
    夕阳雪polly阅读 155评论 0 2
  • 某一天,会不会觉得心里空空的,就像丢了什么一样;某一天,你看朋友圈,突然发现,很多人已经很久没有联系了,而现在能交...
    花曦_米乐阅读 194评论 0 0