Java 9 功能与示例

Java 9是一个主要的版本,它为开发人员带来了很多功能,在本文中,我们将仔细研究Java 9的功能。

Java 10 已发布,如需对 Java 10 发布的完整概述,请浏览 [Java 10 功能](/社区/教程/java-10 功能)。

Java 9 功能

java 9 features Some of the important java 9 features are;

  1. Java 9 REPL (JShell)
  2. 工厂方法不变列表,设置,地图和地图。输入
  3. 私人方法在接口中改进
  4. Java 9模块系统改进)
  5. 进程API改进
  6. 试用资源改进(# )7. CompletableFuture API 改进8. [Reactive Streams]#Reactive

Oracle Corporation 将于 2017 年 3 月底发布 Java SE 9。

Java 9 REPL (JShell) 版本

Oracle Corp 引入了一种名为jshell的新工具,它代表了 Java Shell,也被称为 REPL(Read Evaluate Print Loop)。它用于执行和测试任何类型,界面,enum,对象,陈述等的 Java 构造。我们可以从 https://jdk9.java.net/download/下载 JDK 9 EA (早期访问) 软件。

1G:\>jshell
2|  Welcome to JShell -- Version 9-ea
3|  For an introduction type: /help intro
4
5jshell> int a = 10
6a ==> 10
7
8jshell> System.out.println("a value = " + a )
9a value = 10

如果您想了解更多关于 REPL 工具的信息,请通过 Java 9 REPL 基本(第 1 部分)Java 9 REPL 功能(第 2 部分)

不变列表、设置、地图和地图的工厂方法

奥拉克尔公司已经引入了一些方便的工厂方法来创建不可变列表、设置、地图和Map.Entry对象。这些实用方法被用来创建空的或非空的收藏对象。在Java SE 8和早期版本中,我们可以使用集合类实用方法,如unmodifiableXXX来创建不可变列表对象。例如,如果我们想要创建不可变列表,那么我们可以使用Collections.unmodifiableList方法。然而,这些Collections.unmodifiableXXX方法是一种无聊的和可言的方法。为了克服这些缺陷,奥拉克尔公司已将一些实用方法添加到列表、设置和地图接口中。列表和设置接口有创建空的或无空不可

1List immutableList = List.of();

非空名单示例

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

地图有两套方法: of() 方法和 ofEntries() 方法,分别创建不可变地图对象和不可变地图入口对象。

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

非空地图示例

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

如果您想了解更多有关这些实用方法的信息,请通过以下链接阅读:

接口中的私人方法

在Java 8中,我们可以使用默认和静态方法在接口中提供方法实现,但是我们不能在接口中创建私有方法,为了避免代码过剩和更多可重复使用,Oracle Corp将在Java SE 9接口中引入私有方法,从Java SE 9开始,我们也可以使用私有关键字在接口中写私有和私有静态方法。

 1public interface Card{
 2
 3  private Long createCardID(){
 4    // Method implementation goes here.
 5  }
 6
 7  private static void displayCardDetails(){
 8    // Method implementation goes here.
 9  }
10
11}

如果您想了解更多关于这项新功能的信息,请点击以下链接: Java 9 接口中的私人方法

Java 9 模块系统

其中一个大变化或 java 9 功能是模块系统,Oracle 公司将作为 Jigsaw 项目的一部分引入以下功能。

*模块化JDK *模块化Java源代码 *模块化运行时图像 *嵌入Java内部API *Java平台模块系统

在 Java SE 9 版本之前,我们正在使用 Monolithic Jars 来开发基于 Java 的应用程序. 这个架构有很多限制和缺点. 为了避免所有这些缺点,Java SE 9 配备了模块系统。 JDK 9 配备了 92 个模块(最终发布时可能会发生变化)。

1module com.foo.bar { }

在这里,我们正在使用模块来创建一个简单的模块. 每个模块都有一个名称,相关代码和其他资源. 有关这个新的架构和实践经验的更多细节,请参阅我的原始教程在这里:

流程 API 改进

Java SE 9 带来了进程 API 的一些改进,他们增加了几种新类和方法,以便简化操作系统流程的控制和管理。

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

** 流程 API 示例**

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

尝试改善资源

我們知道,Java SE 7 引入了一個新的例外處理構造:試用資源自動管理資源. 這個新聲明的主要目標是自動更好的資源管理。Java SE 9 將為此聲明提供一些改進,以避免更多說話,並改善一些可讀性。

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

Java 9 例子

1void testARM_Java9() throws IOException{
2 BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt"));
3 try (reader1) {
4   System.out.println(reader1.readLine());
5 }
6}

要了解更多关于这项新功能的信息,请访问我的原始教程: Java 9 Try-With-Resources-Improvements

未来的API改进

在Java SE 9中,Oracle Corp将改进CompletableFuture API,以解决Java SE 8中提出的一些问题。

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

在这里,delayedExecutor()是一个用于返回一个新的Executor的静态实用方法,该方法在给定的延迟后将任务提交给默认执行器。

反应流

如今,反应式编程在开发应用程序中变得非常受欢迎,以获得一些美丽的好处。Scala、Play、Akka等框架已经集成了反应式流,并获得了许多好处。Oracle Corps也在Java SE 9中引入新的反应式流 API。Java SE 9反应式流 API是一个发布/订阅框架,可以很容易地使用Java语言实现非同步、可扩展和并行应用程序。

  • java.util.concurrent.Flow
  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Processor

阅读更多在 [Java 9 反应流]( / 社区 / 教程 / Java-9 反应流)。

匿名内部阶级的钻石操作员

我们知道,Java SE 7引入了一项新功能:Diamond Operator以避免冗余的代码和词汇性,以提高可读性。然而,在Java SE 8中,Oracle Corp(Java Library Developer)发现了使用Diamond Operator与匿名内部类的某些局限性。

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

在这里,我们只使用列表,而不指定类型参数。

可选类改进

在 Java SE 9 中,Oracle Corp 已向 java.util.Optional 类添加了一些有用的新方法. 在这里,我将用一些简单的例子来讨论其中一种方法:流方法 如果在给定的可选对象中存在一个值,这种流() 方法会返回具有该值的序列流。

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

在这里,Optional.stream() 方法被用来将可选的员工对象流转换为可选的员工流,这样我们就可以在结果代码中懒惰地处理这个结果。 要了解更多有关该功能的示例,并阅读更多新方法添加到可选类,请参阅我的原始教程: Java SE 9:可选类改进

流程 API 改进

在 Java SE 9 中,Oracle Corp. 已向 java.util.Stream 接口添加了四种有用的新方法. 由于 Stream 是一个接口,所有这些新实现的方法都是默认方法. 其中两种方法非常重要: dropWhile 和 takeWhile 方法 如果您熟悉 Scala 语言或任何函数编程语言,您肯定会知道这些方法。 这些是写一些功能风格代码的非常有用的方法。 让我们在这里讨论 takeWhile 实用方法。 这个 takeWhile() 作为一个论点采取预言,并返回给定的流值子集的流,直到 Predicate 第一次返回假。 如果第一个值不满足 Predicate,它只返回 em Streptyam。

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

有关 takeWhile 和 dropWhile 方法以及其他新方法的更多信息,请参阅我的原始教程: [Java SE 9: Stream API 改进](/社区/教程/javase9-stream-api 改进)

改进 @Deprecated 注释

在 Java SE 8 和早期版本中, @Deprecated 注释只是一个没有任何方法的 Marker 界面,它被用来标记一个 Java API,即一个类别,字段,方法,界面,构建器,enum 等在 Java SE 9 中,Oracle Corp 增强了 @Deprecated 注释,以提供更多关于 deprecated API 的信息,并提供一个 ** 工具**来分析应用程序对 deprecated API 的静态使用。

HTTP 2 客户端

在Java SE 9中,Oracle Corp将发布新的HTTP 2客户端API,以支持HTTP/2协议和WebSocket功能。作为现有或传统的HTTP客户端API,有许多问题(如支持HTTP/1.1协议,不支持HTTP/2协议和WebSocket,只在封锁模式和许多性能问题中工作),他们正在用新的HTTP客户端取代这个HttpURLConnection API。他们将在java.net.http包下引入新的HTTP 2客户端API。它支持HTTP/1.1和HTTP/2协议。它支持同步(Blocking Mode)和非同步模式。它支持使用WebSocket API的同步模式。我们可以在https://download.net.java/jdk/java9s/docs/java/http

 1jshell> import java.net.http.*
 2
 3jshell> import static java.net.http.HttpRequest.*
 4
 5jshell> import static java.net.http.HttpResponse.*
 6
 7jshell> URI uri = new URI("https://rams4java.blogspot.co.uk/2016/05/java-news.html")
 8uri ==> https://rams4java.blogspot.co.uk/2016/05/java-news.html
 9
10jshell> HttpResponse response = HttpRequest.create(uri).body(noBody()).GET().response()
11response ==> java.net.http.HttpResponseImpl@79efed2d
12
13jshell> System.out.println("Response was " + response.body(asString()))

请参阅我的原始教程在: Java SE 9: HTTP 2 客户端了解 HTTP/2 协议和 WebSocket,新 API 的好处和 OLD API 的退出与一些有用的例子。

多分辨率图像 API

在Java SE 9中,Oracle Corp将推出一个新的多分辨率图像API。该API中的重要接口是MultiResolutionImage。它在java.awt.image包中可用。MultiResolutionImage封装了不同高度和宽度(即不同分辨率)的图像集,并允许我们根据我们的要求查询它们。

Java 9 功能

在本节中,我只会列出一些不同的Java SE 9新功能,我不说这些功能不那么重要,它们也非常重要和有用,以一些有用的例子来理解它们。到目前为止,我没有得到足够的关于这些功能的信息,这就是为什么我要在这里列出它们,以便简要了解。

  • GC (垃圾收集器) 改进
  • Stack-Walking API
  • Filter Incoming Serialization Data
  • Deprecate Applet API
  • Indify String Concatenation
  • Enhanced Method Handles
  • Java Platform Logging API and Service
  • Compact Strings
  • Parser API for Nashorn
  • Javadoc Search
  • HTML5 Javadoc

我将一个接一个地收集这些Java 9功能,并用足够的描述和示例来更新它们。

Published At
Categories with 技术
Tagged with
comments powered by Disqus