JDK9,全名为Java SE Development Kit 9,包含了Java运行环境、开发工具以及Java基础类库的源代码,是Java开发者必不可少的工具之一。极速下载为您提供了JDK9的最新版本(2022版),推荐学习和从事Java开发的朋友们下载使用!
模块化系统:模块是包的容器,Java 9引入了模块化系统(Jigsaw项目),这是其最大的变化之一。
REPL(JShell):一个交互式编程环境。
HTTP/2 客户端:HTTP/2标准是最新的HTTP协议版本,新的HTTPClient API支持WebSocket和HTTP2流以及服务器推送功能。
改进的Javadoc:Javadoc现在可以在API文档中进行搜索,同时输出符合HTML5标准。
多版本兼容JAR包:这个功能允许开发者为特定版本的Java环境创建兼容的class版本。
集合工厂方法:在List、Set和Map接口中,新增了静态工厂方法,帮助开发者创建不可变集合实例。
私有接口方法:Java 9允许在接口中定义私有方法。
进程API:改进的API使开发者能更方便地控制和管理操作系统进程,避免使用本地代码获取进程PID。
改进的Stream API:新增了一些实用的方法,使得流处理变得更简单,且可以用收集器编写复杂查询。
增强的try-with-resources:可以直接在try-with-resources语句中使用已存在的final或等效final的变量,无需再声明新变量。
改进的弃用注解@Deprecated:@Deprecated注解可以用来标记API的弃用状态,指示该API可能会被移除或已经损坏。
改进钻石操作符:匿名类现在也能使用钻石操作符(Diamond Operator)。
增强的Optional类:java.util.Optional新增了许多有用方法,支持将Optional直接转化为stream。
多分辨率图像API:新的API使得开发者能方便地操作和展示不同分辨率的图像。
改进的CompletableFuture API:CompletableFuture类的异步机制能够在ProcessHandle.onExit方法退出时执行操作。
轻量级JSON API:引入了内置的轻量级JSON处理API。
响应式流(Reactive Streams)API:Java 9中新增了响应式流API,支持响应式编程模型。
1. Java平台模块系统
Java 9的核心特性之一是全新的模块化系统。随着代码库的增大,创建复杂的“意大利面条式代码”的可能性显著增加。在这种情况下,两个问题显得尤为突出:代码封装困难,且系统缺乏对不同模块(即JAR文件)之间依赖关系的明确认识。每个公共类都可以被类路径下的任何其他公共类访问,容易导致无意中暴露不希望公开的API。类路径本身也存在问题,如何确保所有需要的JAR都被正确加载,或者避免重复项呢?模块系统解决了这两个问题。
模块化的JAR文件会包含一个模块描述器,该描述器通过“requires”指定模块的依赖关系,“exports”语句则控制哪些包可以被其他模块访问。所有未导出的包会被封装在模块内部。下面是一个模块描述器示例,位于“module-info.java”文件中:
module blog {
exports com.pluralsight.blog;
requires cms;
}
2. Linking
使用具有显式依赖关系的模块和模块化JDK时,新的可能性开始显现。应用程序模块将声明它对其他模块的依赖关系,并对所使用的JDK模块进行声明。为什么不利用这些信息创建一个最小化的运行时环境,只包含应用程序运行所需的模块呢?Java 9提供的jlink工具允许您创建专门针对应用程序的最小化运行时映像,而无需加载完整的JDK版本。
3. JShell:交互式Java REPL
许多编程语言已有了交互式编程环境,而Java也加入了这个行列。您可以从控制台启动jshell,直接输入并执行Java代码。JShell提供即时反馈,是探索API和尝试语言特性的好工具。
一个简单的例子是测试Java正则表达式,JShell使这类操作变得更加便捷。它不仅能作为良好的教学工具,还能提升生产力,尤其是在教授Java时,不再需要解释“public static void main(String[] args)”等冗长的代码。
4. 改进的Javadoc
有时,一些细小的改进会带来显著的效果。你是否曾因为无法找到准确的Javadoc页面而频繁使用Google?现在,Javadoc支持在API文档中直接搜索。更重要的是,它的输出已经符合HTML5标准。此外,每个Javadoc页面都包含有关JDK模块类或接口的来源信息。
5. 集合工厂方法
在Java 9之前,如果你想要创建一个集合(如List或Set),通常需要先实例化集合,然后通过多个“add”方法填充它,这样的代码显得冗长且容易出错。Java 9新增了几种集合工厂方法:
Set ints = Set.of(1, 2, 3);
List strings = List.of("first", "second");
这些方法不仅简洁易读,还避免了对特定集合实现的选择问题。更重要的是,这些方法返回的集合是不可变的,一旦创建,任何进一步的元素添加操作将抛出“UnsupportedOperationException”。
6. 改进的Stream API
Stream API多年来一直是Java标准库中的重要改进之一,它使得在集合上进行转换操作更加简便。Java 9对其进行了增强,新增了四个方法:dropWhile、takeWhile、ofNullable。同时,新增的iterate方法重载允许你通过一个Predicate指定何时停止迭代:
IntStream.iterate(1, i -> i < 100, i -> i + 1).forEach(System.out::println);
这个简单的例子演示了如何输出从1到99的数字。
除此之外,Optional和Stream的结合也得到了增强。现在,你可以通过Optional的stream方法将Optional对象转化为Stream对象:
Stream s = Optional.of(1).stream();
这种方式在组合复杂Stream管道时尤其有用。
7. 私有接口方法
Java 8引入了接口默认方法,允许接口不仅仅包含方法签名,还能提供实现。如果接口中有多个相似的默认方法,该如何处理呢?通常,你会将这些重复代码提取到一个私有方法中。不过,Java 8并不允许默认方法是私有的。Java 9解决了这个问题,允许在接口中添加私有辅助方法:
public interface MyInterface {
void normalInterfaceMethod();
default void interfaceMethodWithDefault() { init(); }
default void anotherDefaultMethod() { init(); }
// 这个方法不会暴露给API
private void init() { System.out.println("Initializing"); }
}
私有接口方法对于开发API时构建其实现非常有用。
8. HTTP/2
Java 9提供了新的方式来处理HTTP请求,替代了旧的`HttpURLConnection` API,并且支持WebSocket和HTTP/2。需要注意的是,新的HttpClient API以孵化模块的形式交付,因此不能保证其100%完成。
9. 多版本兼容JAR
这一特性对库维护者来说尤其重要。每当一个新的Java版本发布时,用户可能需要几年时间才能升级。为此,库需要向后兼容较老的Java版本(通常是Java 6或7)。这意味着在很长一段时间内,你不能利用Java 9的新
显示全部