设为首页 加入收藏

TOP

示例带你提前了解 Java 9 中的新特性(一)
2017-03-30 14:17:47 】 浏览:365
Tags:示例 提前 了解 Java 特性

周末时间,拜读了国外的一个 Java 大牛写的有关 Java SE 9 的新功能介绍,简明扼要,示例得当。于是,一时兴起,以拙劣的英语水平磕磕绊绊翻译至此,供大家了解一番。


Oracle 公司即将在 2017 年 3 月底正式发布 Java SE 9。在这篇文章,我将使用一些示例简明扼要地阐述 Java 9 的新特性。当然,也是时候去了解一下。


Oracle 公司(Java Library 开发者)新引进一个代表 Java Shell 的称之为 “jshell” 或者 REPL(Read eva luate Print Loop)的新工具。该工具可以被用来执行和测试任何 Java 中的结构,如 class,interface,enum,object,statements 等。使用非常简单。


JDK 9 EA(Early Access)下载地址: https://jdk9.java.net/download/


有关 REPL 工具的更多信息,可访问 Java 9 REPL Basics (Part-1)Java 9 REPL Features (Part-2) .


Oracle 公司引入一些方便使用的工厂方法,用于创建不可变集合 List,Set,Map 和 Map.Entry 对象。这些高效实用的方法可用来创建空或者非空集合对象。


在 Java SE 8 和更早版本中,我们常用类似 unmodifiableXXX 的集合类方法创建不可变集合对象。举个例子,比如我们想创建一个不可变的 List 对象,可能使用到 Collections.unmodifiableList 方法。


然而,这些 Collections.unmodifiableXXX 方法显得非常冗长乏味。为了克服这些缺陷,Oracle 公司给 List、Set 和 Map 接口分别添加了两个更加实用的方法。


List 和 Set 接口使用 of() 方法创建一个空或者非空的不可变 List 或 Set 对象,如:


Map 分别有两个方法用于创建不可变 Map 对象和不可变 Map.Entry 对象: of()ofEntries()


更多有关这些实用方法的信息,可以通过这些链接查询:


在 Java 8 中,我们可以在接口中使用默认或者静态方法提供一些实现方式,但是不能创建私有方法。


为了避免冗余代码和提高重用性,Oracle 公司准备在 Java SE 9 接口中引入私有方法。也就是说从 Java SE 9 开始,我们也能够在接口类中使用 ‘private’ 关键字写私有化方法和私有化静态方法。


接口中的私有方法与 class 类中的私有方法在写法上并无差异,如:


有关接口私有方法新特性的更多信息,可访问我的初体验之: Java 9 Private methods in Interface


Java 9 新特性中最大的一个变化就是 Module System。Oracle 公司将引入如下特性作为 Jigsaw Project 的一部分:


Java SE 9 版本之前,我们使用 Monolithic Jars 来开发基于 Java 语言的应用程序。这种体系架构有许多局限性和缺点。为了避免这些缺陷,Java SE 9 迎来了 Module System。


JDK 9 包含有 92 个 modules(当然也可能在最终发布版中有所变化)。我们可以使用 JDK Modules,也能创建我们自己的 modules,如:


这里我们使用 module 关键字创建了一个简单的 module。每个 module 都有一个名字,对应代码和其它一些资源。


想了解更多有关这个新体系架构和亲自动手体验的话,可以参考这里我的体验之:


Java SE 9 迎来一些 Process API 的改进,通过添加一些新的类和方法来优化系统级进程的管控。


Process API 中的两个新接口:


想了解更多新 API 的信息,可以通过参考我的初体验之:Java SE 9: Process API Improvements。


我们知道,Java SE 7 引入了一个新的异常处理结构: Try-With-Resources ,来自动管理资源。这个新的声明结构主要目的是实现“Automatic Better Resource Management”(“自动资源管理”)。


Java SE 9 将对这个声明作出一些改进来避免一些冗长写法,同时提高可读性。


有关这个特性的更多信息,可以参考我的初体验之: Java 9 Try-With-Resources Improvements


在 Java SE 9 中,Oracle 公司将改进 CompletableFuture API 来解决一些 Java SE 8 中出现的问题。这些被添加的 API 将用来支持一些延时和超时操作,实用方法和更好的子类化。


这里的 delayedExecutor() 是静态实用方法,用来返回一个在指定延时时间提交任务到默认执行器的新 Executor 对象。


有关这个特性的更多信息,请访问我的初体验之:Java SE 9: CompletableFuture API Improvements。


现在,Reactive Programming 由于其便利性在应用程序开发中变得非常流行。Scala、Play、Akka 等框架已经集成 Reactive Streams 并且受益良多。Oracle 公司也在 Java SE 9 中引入了一个新的 Reactive Streams API。


Java SE 9 Reactive Streams API 是一个发布订阅型框架,使我们能够非常简单地使用 Java 语言就能实现异步的、可拓展的和并行的应用。


Java SE 9 引进下面这些 API 来在基于 Java 语言的应用中开发 Reactive Streams:


如果你想了解这个新 API 的更多信息,可以参考我的初体验之:Introduction to Reactive Programming and Java SE 9: Reactive Streams。


我们知道,Java SE 7 引入了一个新的特性:Diamond Operator,来避免冗长代码和提升可读性。然而在 Java SE 8 中,Oracle 公司发现在 Diamond 操作器和匿名内部类的使用中存在一些局限性,后来修复了这些问题并准备将其作为 Java 9 的一部分发布出去。


在 Java SE 9 中,Oracle 公司添加了一些新的实用方法到 java.util.Optional 类里面。这里我将使用一些简单的示例来描述其中的一个:stream 方法。


如果一个值出现在给定 Optional 对象中,stream() 方法可以返回包含该值的一个顺序 Stream 对象。否则,将返回一个空 Stream。


stream() 方法已经被添加,并用来在 Optional 对象中使用,如:


这里的 Optional.stream() 方法被用来转化 Employee 可选流对象 到 Employee 流中,如此我们便可以在后续代码中使用这个结果。


理解这个特性的更多信息,可参考我的初体验过程: Java SE 9: Optional Class Improvements


在 Java SE 9 中,Oracle 公司添加了四个非常有用的新方法到 java.util.Stream 接口里面。正如 Stream 作为一个接口类,所有这些新的实现方法都是默认方法。其中有两个方法非常重要:dropWhile 和 takeWhile。


如果你熟悉 Scala 语言或者其它函数编程语言的话,你一定知道这些方法。他们在写一些功能样式代码时非常有用。这里我们一起讨论一下 takeWhile 实用方法。


这个 takeWhile() 方法使用一个断言作为参数,返回给定 Stream 的子集直到断言语句第一次返回 false。

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python 日志模块 logging 详解 下一篇js代码实现二叉查找树的算法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目