大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

Java8新特性
Java9新特性

Java9特性及示例

Java 9已經(jīng)發(fā)布了有一段時間了,現(xiàn)在讓我們來看看Java 9中的功能特性,看看它帶給我們的哪些重大變化。

一些重要的Java 9特性是如下所示 

• Java 9 REPL(JShell)

• 用于列表,集合,映射和Map.Entry的工廠方法

• 接口的私有方法

• Java 9模塊系統(tǒng)

• Process API改進

• Try With Resources改進

• CompletableFuture API改進

• 反應(yīng)流

• 菱形運算符和匿名內(nèi)部類

• Optional類改進

• 流API改進

• 增強了@Deprecated注釋

• HTTP 2客戶端

• 多分辨率圖像API

• 其它雜項Java 9特性

Oracle公司將在2017年3月底前發(fā)布Java SE 9。在本文中,將通過一些示例簡要討論“Java 9功能”。

1、Java 9 REPL(JShell)

Oracle公司推出了一種名為“jshell”的新工具。 它代表Java Shell,也稱為REPL(Read Evaluate Print Loop)。 它用于非常容易地執(zhí)行和測試任何Java結(jié)構(gòu),如類,接口,枚舉,對象,語句等。

運行效果如下所示

Oracle Corp引入了一些便利的工廠方法來創(chuàng)建Immutable List,Set,Map和Map.Entry對象。 這些實用程序方法用于創(chuàng)建空的或非空的集合對象。

2.、用于不可變列表,集合,映射和Map.Entry的工廠方法

在Java SE 8和更早的版本中,我們可以使用不可修改的Collections類實用程序方法來創(chuàng)建Immutable Collection對象。 例如,如果想創(chuàng)建一個不可變列表,那么可以使用Collections.unmodifiableList方法。

然而這些Collections.unmodifiableXXX方法是非常繁瑣和冗長的方法。為了克服這些缺點,Oracle公司在List,Set和Map接口中增加了一些實用方法。

List和Set接口具有of()方法來創(chuàng)建一個空的或不空的不可變列表或Set對象,如下所示:

空列表示例

List immutableList = List.of();

非空列表示例

List immutableList = List.of("one","two","three");

Map有兩套方法:分別創(chuàng)建Immutable Map對象和Immutable Map.Entry對象的of()方法和Entries()方法。

空Map示例

jshell> Map emptyImmutableMap = Map.of()
emptyImmutableMap ==> {}

非空映射示例

jshell> Map nonemptyImmutableMap = Map.of(1, "one", 2, "two", 3, "three")
nonemptyImmutableMap ==> {2=two, 3=three, 1=one}

3、接口的私有方法

在Java 8中,可以使用Default和Static方法在接口中提供方法實現(xiàn)。 但是不能在接口中創(chuàng)建私有方法。

為了避免冗余代碼和更多的重用性,Oracle公司將在Java SE 9接口中引入私有方法。 從Java SE 9開始,我們可以使用'private'關(guān)鍵字在接口中編寫私有和私有靜態(tài)方法。

這些私有方法與其他類私有方法相似,它們之間沒有區(qū)別。

public interface Card{

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

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

}

4、Java 9模塊系統(tǒng)

模塊系統(tǒng)是Java 9特性之一。 Oracle公司將引入以下功能作為Jigsaw項目的一部分。

• 模塊化JDK

• 模塊化Java源代碼

• 模塊化運行時圖像

• 封裝Java內(nèi)部API

• Java平臺模塊系統(tǒng)

在Java SE 9版本之前,使用Monolithic Jars來開發(fā)基于Java的應(yīng)用程序。 這種架構(gòu)有很多限制和缺點。 為了避免所有這些缺陷,Java SE 9隨模塊系統(tǒng)一起提供。

JDK 9即將推出92個模塊(可能會在最終版本中發(fā)生變化)。 我們可以使用JDK模塊,也可以創(chuàng)建自己的模塊,如下所示:

簡單模塊示例

module com.foo.bar { }

這里我們使用'module'關(guān)鍵字來創(chuàng)建一個簡單的模塊。 每個模塊都有一個名稱,相關(guān)的代碼和其他資源。

5、 Process API改進

Java SE 9即將在Process API中進行一些改進。他們增加了一些新的類和方法來簡化操作系統(tǒng)進程的控制和管理。

Process API中有兩個新的接口:

java.lang.ProcessHandle
java.lang.ProcessHandle.Info

Process API示例

ProcessHandle currentProcess = ProcessHandle.current();
System.out.println("Current Process Id: = " + currentProcess.getPid());

6、Try-With-Resources改進

我們知道,Java SE 7引入了一個新的異常處理結(jié)構(gòu):Try-With-Resources來自動管理資源。 這個新聲明的主要目標是“自動更好的資源管理”。

Java SE 9將對此語句進行一些改進,以避免更多冗長并提高某些可讀性。

Java SE 7示例

void testARM_Before_Java9() throws IOException{
 BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt"));
 try (BufferedReader reader2 = reader1) {
   System.out.println(reader2.readLine());
 }
}

Java SE 9示例

void testARM_Java9() throws IOException{
 BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt"));
 try (reader1) {
   System.out.println(reader1.readLine());
 }
}

7、CompletableFuture API改進

在Java SE 9中,Oracle Corp將改進CompletableFuture API來解決Java SE 8中出現(xiàn)的一些問題。它們將增加支持一些延遲和超時,一些實用方法和更好的子分類。

Executor exe = CompletableFuture.delayedExecutor(50L, TimeUnit.SECONDS);

這里delayedExecutor()是靜態(tài)工具方法,用于返回一個新的Executor,它在給定的延遲后將任務(wù)提交給缺省執(zhí)行程序。

8、反應(yīng)流

現(xiàn)在,反應(yīng)式編程在開發(fā)應(yīng)用程序以獲得一些優(yōu)點方面變得非常流行。 Scala,Play,Akka等。框架已經(jīng)集成了Reactive Streams并獲得許多好處。 Oracle Corps還在Java SE 9中引入了新的Reactive Streams API。

Java SE 9 Reactive Streams API是一個發(fā)布/訂閱框架,可以使用Java語言輕松實現(xiàn)異步,可伸縮和并行應(yīng)用程序。

Java SE 9引入了以下API來開發(fā)基于Java的應(yīng)用程序中的Reactive Streams。

• java.util.concurrent.Flow

• java.util.concurrent.Flow.Publisher

• java.util.concurrent.Flow.Subscriber

• java.util.concurrent.Flow.Processor

9、菱形運算符匿名內(nèi)部類

我們知道,Java SE 7引入了一項新功能:菱形運算符,以避免冗余代碼和冗長,以提高可讀性。 但是,在Java SE 8中,Oracle Corp(Java Library Developer)發(fā)現(xiàn)在使用帶有匿名內(nèi)部類的菱形(Diamond)操作符方面存在一些限制。 他們已經(jīng)修復(fù)了這些問題并將作為Java 9的一部分發(fā)布。

 public List getEmployee(String empid){
     // Code to get Employee details from Data Store
     return new List(emp){ };
  }

這里只使用List而不指定類型參數(shù)。

10、Optional類改進

在Java SE 9中,Oracle公司為java.util.Optional類添加了一些有用的新方法。 在這里將通過一些簡單的例子來討論其中的一種方法:流方法

如果給定Optional對象中存在一個值,則此stream()方法將返回具有該值的順序Stream。 否則,它將返回一個空流。

已經(jīng)添加了stream()方法來延遲處理Optional對象,如下所示:

Stream<Optional> emp = getEmployee(id)
Stream empStream = emp.flatMap(Optional::stream)

這里使用Optional.stream()方法將Employee對象的一個可選的Stream轉(zhuǎn)換為一個Employee流,以便可以在結(jié)果代碼中懶處理這個結(jié)果。

11、Stream API改進

在Java SE 9中,Oracle Corp為java.util.Stream接口添加了四個有用的新方法。 由于Stream是一個接口,所有這些新實現(xiàn)的方法都是默認方法。 其中兩個非常重要:dropWhile和takeWhile方法

如果您熟悉Scala語言或任何函數(shù)編程語言,您一定會了解這些方法。 在編寫一些功能樣式代碼時,這些是非常有用的方法。 在這里我們討論takeWhile實用方法。

這個takeWhile()將一個謂詞作為參數(shù),并返回給定Stream值的一個子集的Stream,直到Predicate返回false。 如果第一個值不滿足該謂詞,它只會返回一個空的流。

jshell> Stream.of(1,2,3,4,5,6,7,8,9,10).takeWhile(i -> i < 5 )
                 .forEach(System.out::println);
1
2
3
4

12、增強了@Deprecated注釋

在Java SE 8和更早版本中,@Deprecated注釋只是一個沒有任何方法的Marker接口。 它用于標記一個Java API,它是一個類,字段,方法,接口,構(gòu)造函數(shù),枚舉等。

在Java SE 9中,Oracle Corp增強了@Deprecated注釋以提供有關(guān)不推薦使用的API的更多信息,并提供了一個工具來分析應(yīng)用程序?qū)Σ煌扑]使用的API的靜態(tài)使用情況。 他們添加了兩個方法到這個Deprecated接口:forRemoval和自此來提供這些信息。

13.、HTTP2客戶端

在Java SE 9中,Oracle Corp將發(fā)布新的HTTP 2客戶端API以支持HTTP/2協(xié)議和WebSocket功能。 由于現(xiàn)有的或傳統(tǒng)的HTTP客戶端API有許多問題(例如支持HTTP/1.1協(xié)議,不支持HTTP/2協(xié)議和WebSocket,只能在阻塞模式和大量性能問題下工作),他們用新的HTTP替換了這個HttpURLConnection API 客戶。

他們將在java.net.http包下引入新的HTTP 2客戶端API。 它支持HTTP/1.1和HTTP/2協(xié)議。 它支持同步(阻塞模式)和異步模式。 它支持使用WebSocket API的異步模式。

HTTP2客戶端示例

jshell> import java.net.http.*

jshell> import static java.net.http.HttpRequest.*

jshell> import static java.net.http.HttpResponse.*

jshell> URI uri = new URI("http://rams4java.blogspot.co.uk/2016/05/java-news.html")
uri ==> http://rams4java.blogspot.co.uk/2016/05/java-news.html

jshell> HttpResponse response = HttpRequest.create(uri).body(noBody()).GET().response()
response ==> java.net.http.HttpResponseImpl@79efed2d

jshell> System.out.println("Response was " + response.body(asString()))

14、多分辨率圖像API

在Java SE 9中,甲骨文公司將推出一種新的多分辨率圖像API。 此API中的重要接口是MultiResolutionImage,它在java.awt.image包中可用。

MultiResolutionImage封裝了一組具有不同高度和寬度(即不同分辨率)的圖像,并允許我們按照自己的要求查詢它們。

全部教程
主站蜘蛛池模板: 成人国产在线视频在线观看 | 国产精品成人免费视频不卡 | 国产精品福利视频一区二区三区 | 青青青激情视频在线最新 | 夜间福利在线观看 | 欧美成人交tv免费观看 | 高清性色生活片久久久 | 天天射夜夜操 | 亚洲原创区 | 黑人一级毛片 | 天天射日日 | 福利在线观看 | 综合视频在线 | 久久国产精品免费观看 | 久99久视频 | 久久久久久久免费视频 | 国产免费不卡v片在线观看 国产免费不卡视频 | 69国产成人综合久久精品 | 一级片aaaaaa | 一级毛片免费在线播放 | 美国成人毛片 | 在线成人毛片 | 波多野结衣一区二区三区高清在线 | 五月伊人网 | 九九热精品免费视频 | 成人免费黄网站 | 88精品视频 | 高清国产美女一级a毛片录 高清国产美女一级毛片 | 深夜啪啪网站 | 成人欧美一区二区三区在线观看 | 美国一级毛片aa | 玖玖精品视频在线 | 国产精品大全国产精品 | 亚洲精品一区二区观看 | 九九综合视频 | 日韩在线第二页 | h视频在线观看网站 | 欧美国产精品日韩在线 | 免费爱爱视频 | 精品国产福利 | 黄视频在线观看www 黄视频在线观看网站 |