你好啊,我是大阳,今天给大家介绍一下Java9的新特性,并提供一些代码示例。
Java 9带来了许多新的增强功能,这些增强功能将在很大程度上影响你的编程风格和习惯。最大的变化是Java的模块化。这是继Java 8中的Lambdas之后的另一个重大变化。在本文中,我将列出Java 9版本的一部分更新内容。
本文主要内容:
- Java模块化
- 接口私有方法
- HTTP/2客户端
- JShell – REPL 工具
- 平台和JVM日志记录
- Process API更新
- Collection(集合) API更新
- Stream(流) API改进
- 多版本Jar文件
- @Deprecated 注解更改
- Java 文档更新
- 其他功能
1. Java 模块化
JPMS(Java Platform Module System)是Java 9发行版的核心亮点。它也被称为Jigshaw项目。模块是新的结构,就像我们已经有包一样。使用新的模块化编程开发的应用程序可以看作是交互模块的集合,这些模块之间具有明确定义的边界和依赖关系。
JPMS包括为编写模块化应用程序提供支持,以及将JDK源代码模块化。JDK 9 附带了大约 92 个模块(在 GA 版本中可以进行更改)。Java 9 Module System有一个"java.base"模块。它被称为基本模块。它是一个独立的模块,不依赖于任何其他模块。默认情况下,所有其他模块都依赖于"java.base"。
在java模块化编程中:
- 一个模块通常只是一个 jar 文件,在根目录下有一个文件
module-info.class
。 - 要使用模块,请将 jar 文件包含到
modulepath
而不是classpath
. 添加到类路径的模块化 jar 文件是普通的 jar 文件,module-info.class
文件将被忽略。
典型的module-info.java
类如下所示:
module helloworld {
exports cn.dayangshuo.demo;
}
module test {
requires helloworld;
}
2. 接口私有方法
Java 8 允许在接口中编写默认方法,这是一个广受欢迎的功能。从 Java 9 开始,您可以在接口中包含私有方法。
这些私有方法将提高接口内部的代码可重用性。例如,如果两个默认方法需要共享代码,私有接口方法将允许它们这样做,但不会将该私有方法暴露给它的实现类。
在接口中使用私有方法有四个规则:
- 私有接口方法不能是抽象的。
- 私有方法只能在接口内部使用。
- 私有静态方法可以在其他静态和非静态接口方法中使用。
- 私有非静态方法不能在私有静态方法中使用。
示例:
public interface CustomCalculator {
default int addEvenNumbers(int... nums) {
return add(n -> n % 2 == 0, nums);
}
default int addOddNumbers(int... nums) {
return add(n -> n % 2 != 0, nums);
}
private int add(IntPredicate predicate, int... nums) {
return IntStream.of(nums)
.filter(pr