Java 9 已經(jīng)在 JavaOne 大會(huì)發(fā)布許久,千鋒哈爾濱Java開(kāi)發(fā)培訓(xùn)老師將在本文中將為我們梳理 Java 9 所具備的新功能。
JShell:交互式 Java REPL
很多編程語(yǔ)言都已經(jīng)具有了交互式編程環(huán)境,如今 Java 也加入了這個(gè)具有REPL [讀取、評(píng)估、打印、循環(huán)]功能的俱樂(lè)部。 交互式shell可以讓你輕松完成 Java 類(lèi)、接口、枚舉、對(duì)象、語(yǔ)句等的測(cè)試任務(wù)。使用 JShell 進(jìn)行測(cè)試時(shí)無(wú)需部署整個(gè)解決方案。JShell也就是Java Shell的縮寫(xiě),可以在終端窗口執(zhí)行JShell命令將其啟動(dòng),然后就可以直接在命令行中輸入并執(zhí)行 java 代碼了。
使用這個(gè)工具的絕佳好處之一是,我們可以輕松測(cè)試我們的微服務(wù),而不需要一遍又一遍地部署它們。這有助于加速終極組件的開(kāi)發(fā)、迭代和質(zhì)量。
私有接口方法
Java 8為我們提供了接口中的默認(rèn)和靜態(tài)方法實(shí)現(xiàn),但是,我們無(wú)法在接口中創(chuàng)建私有方法。如果接口中有多個(gè)默認(rèn)方法包含相同功能,通常,我們會(huì)重構(gòu)這些方法,調(diào)用一個(gè)可復(fù)用的私有方法。在Java 8中,你可以在接口中創(chuàng)建私有方法。隨著 Java 9的發(fā)布,這個(gè)問(wèn)題得以解決,現(xiàn)在我們可以向接口添加私有輔助方法來(lái)解決這種類(lèi)型的問(wèn)題。
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 模塊系統(tǒng)
Java 9的一大變化是引入了模塊系統(tǒng)(Jigsaw 項(xiàng)目)。一直到 Java 8 版本,我們都在使用 Monolithic Jars 來(lái)設(shè)計(jì)基于 Java 語(yǔ)言的應(yīng)用程序。這種設(shè)計(jì)有兩個(gè)主要的基本問(wèn)題:難以封裝代碼,并且系統(tǒng)不同部分之間缺乏明確依賴(lài)的概念。為了避免這些根本問(wèn)題,Java 9 引入了模塊系統(tǒng)。模塊系統(tǒng)主要有如下好處:
1. JDK、JRE、JAR等被分割成小的模塊,我們可以只使用我們需要的模塊即可。這有助于縮小小型設(shè)備應(yīng)用程序的尺寸。
2. 對(duì)封裝提供強(qiáng)力支持。
3. 內(nèi)部 Non-Critical API 被隱藏,因?yàn)槟K安全地隱藏了不需要的內(nèi)部細(xì)節(jié)。這大大提高了應(yīng)用程序的安全性。
改進(jìn)的 Javadoc
我們一直以來(lái)都使用 Google 來(lái)搜索問(wèn)題,才能找到正確的 Javadoc 頁(yè)面。使用 Java 9這個(gè)問(wèn)題得以解決,Javadoc 現(xiàn)在支持在 API 文檔中的進(jìn)行搜索。
HTTP/2客戶(hù)端
Java 9 中有新的 HTTP/2 客戶(hù)端 API 來(lái)處理 HTTP 調(diào)用。它代替了老舊的 `HttpURLConnection` API,并提供對(duì) 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 提供簡(jiǎn)化版的字符串格式,有助于清楚區(qū)分主要、次要、安全和補(bǔ)丁新版本。新版本的字符串格式符合當(dāng)前的行業(yè)慣例,特別是語(yǔ)義版本控制(Server)。格式如下:
$MAJOR.$MINOR.$SECURITY.$PATCH
$MAJOR 是主要版本增加的版本號(hào),例如 JDK 9,其中包含由 Java SE 平臺(tái)規(guī)范指定的重要新功能。主要版本包含新功能和對(duì)現(xiàn)有功能的改,這些功能將提前計(jì)劃和公布。
$MINOR 是為每個(gè)次要新增加的版本號(hào),例如錯(cuò)誤修復(fù),標(biāo)準(zhǔn) API 的修訂,或相關(guān)平臺(tái)規(guī)范范圍之外的功能實(shí)現(xiàn)。
$SECURITY是針對(duì)安全新版本增加的版本號(hào),其中包含關(guān)鍵修復(fù)程序,包括提高安全性所需的修補(bǔ)程序。
$PATCH是包含已經(jīng)一起測(cè)試的安全性和高優(yōu)先級(jí)客戶(hù)修補(bǔ)程序的版本的版本號(hào)。
多版本兼容 JAR
Java 9 擴(kuò)展了 JAR 文件格式,以便在單個(gè)存檔中共享多個(gè) Java 版本的類(lèi)文件。
多版本 JAR(MRJAR)包含針對(duì)特定 Java 平臺(tái)版本的類(lèi)和資源的附加版本目錄。使用 jar 工具 --release 選項(xiàng)指定版本化目錄。
改進(jìn)的 Stream API
改進(jìn)的 Stream API 允許對(duì)對(duì)象序列化數(shù)據(jù)的傳入流進(jìn)行過(guò)濾,以提高安全性和魯棒性。
對(duì)象序列化客戶(hù)端可以容易地驗(yàn)證其輸入,并且導(dǎo)出的遠(yuǎn)程方法調(diào)用(RMI)對(duì)象也可以容易地驗(yàn)證調(diào)用參數(shù)。
序列化客戶(hù)端實(shí)現(xiàn)了在 ObjectInputStream 上設(shè)置的過(guò)濾器接口。對(duì)于 RMI,用RemoteServerRef 導(dǎo)出對(duì)象,該 RemoteServerRef 將 MarshalInputStream 上的過(guò)濾器設(shè)置為在未調(diào)用時(shí)驗(yàn)證調(diào)用參數(shù)。
當(dāng)然,Java9有了,Java10也不遠(yuǎn)了。想要進(jìn)一步了解Java嗎?來(lái)千鋒教育,學(xué)全新Java知識(shí)。
上一篇:哈爾濱Java程序員培訓(xùn)課哪個(gè)好?我的經(jīng)驗(yàn)錯(cuò)不了
下一篇:返回列表
學(xué)員姓名:徐同學(xué)
入職單位:梟*科技
入職月薪:11000
時(shí)間:2016.05.26
學(xué)員姓名:潘同學(xué)
入職單位:酷*互動(dòng)
入職月薪:13000
時(shí)間:2016.05.20
學(xué)員姓名:張同學(xué)
入職單位:斑*實(shí)業(yè)
入職月薪:14000
時(shí)間:2015.12.08
學(xué)員姓名:黃同學(xué)
入職單位:福*中金
入職月薪:12000
時(shí)間:2015.12.07
學(xué)員姓名:韓同學(xué)
入職單位:寬*是風(fēng)
入職月薪:17000
時(shí)間:2015.09.17
學(xué)員姓名:鄭同學(xué)
入職單位:騰*眾創(chuàng)
入職月薪:16500
時(shí)間:2015.11.02
學(xué)員姓名:錢(qián)同學(xué)
入職單位:數(shù)*科技
入職月薪:16000
時(shí)間:2015.11.04
學(xué)員姓名:孫同學(xué)
入職單位:快*
入職月薪:14000
時(shí)間:2015.06.12
學(xué)員姓名:郭同學(xué)
入職單位:本*生活網(wǎng)
入職月薪:14000
時(shí)間:2015.10.08
學(xué)員姓名:張同學(xué)
入職單位:泰*集團(tuán)
入職月薪:13800
時(shí)間:2015.06.11
了解千鋒動(dòng)態(tài)
關(guān)注千鋒教育服務(wù)號(hào)
掃碼匿名提建議
直達(dá)CEO信箱