Java 9的前9大改进和功能,程序员不妨先了解
Java 9即将推出。你准备好新版本将带来的新功能吗?在本文中,笔者对Java重要的生态系统的改变,包括新的模块系统,语言和语法的变化等,进行综合介绍。
Java 9随着发布的日期临近,程序员和开发者对其带来的新功能的兴趣逐渐升高。新Java版本的发布日期是2017年9月21日。还有不到两个月的时间!Java 9有很多变化,下面我将列出将其添加到新的Java 9中的9个重要改进。
1.新模块系统
编写大型应用程序或维护库有几个问题。随着代码库的增加,创建复杂代码的机会增加。每个用户都很难真正封装代码类成为公共API的一部分,并且在系统的不同部分之间没有明确的依赖关系的概念。
包含在新Java版本中的Jigsaw旨在解决所有这些问题。模块将由通常的类和新的模块声明文件组成。该模块描述符明确地定义了我们的模块需要什么依赖关系,以及哪些模块被外部使用。在exports子句中未提及的所有包默认情况下将封装在模块中。
一个简单的模块声明,导出一些它的包:
如果你想了解如何构建应用程序模块或熟悉Jigsaw语法和项目的更多示例,可以在此处访问快速入门指南。
http://openjdk.java.net/projects/jigsaw/quick-start
2.支持HTTP/2.0
HTTP/1.1和HTTP/2的主要区别是如何在客户端和服务器之间构建和传输数据。HTTP/1.1依赖于请求/响应周期。 HTTP/2允许服务器“push”数据:它可以发送比客户端请求更多的数据。 这使得它可以优先处理并发送对于首先加载网页至关重要的数据。Java 9将完全支持HTTP 2.0,并为Java提供了一个新的HTTP客户端,它将替代仅适用于blocking模式的HttpURLConnection – 每对请求/响应有一个线程,这增加了延迟和加载时间的网页。HTTP客户端还提供API来处理HTTP和服务器推送等HTTP功能。
两个HTTP交互示例如下所示,它们来自Java 9文档:
3.改进的Javadoc
根据我在Java开发公司Dreamix工作的经验。目前,如果想要找到一些类文档,必须在google中搜索。在Java 9中,Javadoc有几个改进,其中一个是添加一个搜索框。
如图在Java 8中
如图在Java 9中
4.Stream改进
Stream API是Java 8中的游戏更改功能之一,Java 9已经变得更加出色。 现在,你可以创建Stream from Optional。Stream接口还添加了四种新方法:iterate,dropWhile,takeWhile,ofNullable。
DropWhile丢弃Stream的第一个项目,直到满足条件。
TakeWhile处理项目直到满足条件。
Iterate允许使用Stream为for循环写入适当的替换。它需要Stream的初始值,定义何时停止迭代的条件和生成下一个元素的步骤函数。
OfNullable作为名称建议让你从对象创建Stream,而不需要检查null。它返回一个包含单个元素的顺序Stream,如果非空,则返回一个空的Stream。
5.使用新的工厂方法更容易地初始化Collections
目前,如果要创建预定义值列表,您必须进行大量输入:
将来,通过新添加的工厂方法,常用Collections的初始化将会更加容易。接口中的静态方法使其成为可能,增强了列表,集合和映射接口,以便使用多达10个元素创建Collections的方法。 生成的对象是针对性能进行了优化的不可变Collections。
在创建后向这些Collections添加项将导致“UnsupportedOperationException”。
上面的代码看上去更加美观:
这些是一些添加的方法:
6.接口中的私有方法
Java 8给了我们界面中的默认方法。这些方法具有body和给界面的行为,不仅是空的签名。 如果你有两种公共方法几乎相同的话,你会怎么做? 很可能将尝试以私有方式移动通用代码,并从公共方法中调用它们。但是在类似的情况下,你会在接口中使用两种默认方法,而不是类中的两种公共方法吗?
在Java 9中,可以使用完全相同的方法,并具有通用逻辑的私有方法,此方法将不会成为你API的一部分。
7.语言和语法的改进
现在用资源语句编写try将更容易。 以前,执行后必须关闭的所有资源必须在try子句中初始化,如下例所示:
从Java 9开始,我们可以在try子句中使用最终和有效的最终资源:
从Java 9变量名称不能由单个下划线(“_”)组成。 可以在my_var中的变量名中写下划线,但是单独的下划线将导致错误。背后的原因是下划线将被保留以供将来在语言中使用。
我们将能够与匿名内部类共同使用钻石操作符(diamond operator):
8.增强处理API
到目前为止,管理和控制操作系统进程的能力有限。 此外,你编写的执行此类交互的代码取决于操作系统。
新版本将扩展与操作系统进行交互的能力。将添加新的方法来处理PID管理,进程名称和状态,子进程管理等等。
检索当前进程PID并在所有操作系统上运行的示例代码将如下所示:
9.Java REPL = Jshell
最后但并非最不重要的Java9将包括项目Kulla(http://openjdk.java.net/projects/kulla/)中的Read Evaluate Print Loop(REPL)工具。这个命令行工具被称为jshell,如果你想自己编写几行代码来测试一下,这将是完美的工具。
只需执行简单的命令,就不需要使用main方法的新类。
我们在新版本中看不到什么?
有几个好的功能从即将发布的版本中删除。但是,可以在Java 10中等待。
一个标准化和轻量级的JSON API被许多java开发人员所青睐。但是由于资金问题无法在Java 9中见到,但并不会削减掉。Java平台首席架构师Mark Reinhold在JDK 9邮件列中说:“这个JEP将是平台上的一个有用的补充,但是在计划中,它并不像Oracle资助的其他功能那么重要,可能会重新考虑JDK 10或更高版本中实现。
===============================================================================