一、前言
我们现在大部分公司都在使用jdk8,jdk8的功能主要是增加了lambda 流式处理,还有优化了线程安全的时间LocalDate,这里我就先不赘述了,那jdk9相对jdk8优化了哪些功能,以及新增了哪些特性功能呢,下面一一给大家讲述一下
二、新增特性
以下是一些主要的变化和新增特性:
1. 模块化系统 (Jigsaw)
这是 JDK 9 中最重要的变化。
Java 9 引入了一个名为 Jigsaw 的模块化系统,它允许将 Java 代码库划分为多个模块,并定义它们之间的依赖关系。这使得开发者可以更轻松地构建和维护大型应用程序。
示例:
module com.zygxsq.myapp { requires com.zygxsq.mylib; }
2. JShell
JShell 是 Java 9 引入的一个交互式 Java REPL (Read-Eval-Print Loop) 工具,开发者可以在命令行中编写和执行 Java 代码片段,无需创建完整的 Java 类。这对于学习 Java 语言以及快速测试代码片段非常有用。
示例:
在命令行中输入 jshell
启动 JShell,然后输入以下代码:
int a = 10; int b = 20; int sum = a + b; System.out.println(sum);
3. 改进的 Javadoc
JDK 9 改进了 Javadoc 工具,现在它支持生成 HTML 5 格式的文档,并添加了一个搜索框,方便开发者快速查找相关类和方法。
4. 多分辨率图像 API
Java 9 添加了一个新的多分辨率图像 API,允许开发者为不同分辨率的屏幕提供不同尺寸的图像,系统会根据屏幕分辨率自动选择合适的图像。
示例:
List<Image> images = ... BaseMultiResolutionImage multiResImage = new BaseMultiResolutionImage(images); Image bestImage = multiResImage.getResolutionVariant(width, height);
5. 集合工厂方法
Java 9 为 List、Set 和 Map 接口引入了一些方便的静态工厂方法,用于创建不可变的集合。
示例:
List<String> list = List.of("one", "two", "three"); Set<String> set = Set.of("a", "b", "c"); Map<String, Integer> map = Map.of("one", 1, "two", 2, "three", 3);
6. Reactive Streams API
Java 9 增加了对响应式编程的支持,添加了 java.util.concurrent.Flow 类,它定义了一组接口,用于实现异步、非阻塞的数据处理。
示例:
class MySubscriber implements Flow.Subscriber<String> { @Override public void onSubscribe(Flow.Subscription subscription) { ... } @Override public void onNext(String item) { ... } @Override public void onError(Throwable throwable) { ... } @Override public void onComplete() { ... } }
7. 私有接口方法
Java 9 允许在接口中定义私有方法,这有助于避免接口中的代码重复。
示例:
public interface MyInterface { default void doSomething() { doCommon(); } default void doAnotherThing() { doCommon(); } private void doCommon() { System.out.println("Common implementation by 小小鱼儿小小林"); } }
好的,接下来我会介绍更多的 JDK 9 的特性和改进:
8. HTTP 2 客户端 API
在 JDK 9 中,引入了一个新的 HTTP 客户端 API,它支持 HTTP/2 协议和 WebSocket,并且在设计上考虑了 HTTP/2 的特性和需求。
示例:
HttpRequest request = HttpRequest.newBuilder() .uri(new URI("http://tools.zygxsq.cn/")) .build(); HttpClient client = HttpClient.newHttpClient(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body());
9. 优化的 Stream API
JDK 9 对 Stream API 进行了改进,添加了例如 takeWhile
、dropWhile
和 ofNullable
等新方法。
示例:
Stream<Integer> numbers = Stream.of(1, 2, 3, 4, 5); numbers.takeWhile(n -> n < 3).forEach(System.out::println); // 输出 1, 2
10. 改进的 try-with-resources
如果你已经有一个资源是 final 或者等效于 final 变量,你可以在 try-with-resources 语句中使用它,而无需在 try-with-resources 语句中声明一个新的变量。
示例:
MyResource res = new MyResource(); try (res) { res.use(); }
11. 平台日志 API 和服务
新的 API java.util.logging.PlatformLogger 提供了简单的日志记录接口,用于 JVM 和 JDK 类,以及由 Java 应用程序使用。
示例:
PlatformLogger logger = PlatformLogger.getLogger("myLogger"); logger.info("Log blog xiao xiao yu er xiao xiao lin tools.zygxsq.cn");
12. Process API 更新
JDK 9 对 Process API 进行了改进,添加了一些新的方法,用于获取进程的 PID、进程是否活动、进程的父进程等信息。
示例:
ProcessHandle processHandle = ProcessHandle.current(); System.out.println("PID: " + processHandle.pid());
13. 新的版本字符串格式
JDK 9 改变了版本字符串的格式,新的格式更加直观和易于理解。
14. jlink 工具
jlink 是一个新的命令行工具,它可以生成定制的 JRE,只包含你的应用程序需要的模块。
示例:
jlink --module-path $JAVA_HOME/jmods --add-modules java.base --output customjre
15. 便捷工厂方法创建集合
Java 9 提供了一组便捷的方法来创建集合,如 List、Set、Map 和 Map.Entry。这些方法用于创建包含少量元素的不可修改集合。
示例:
List<String> list = List.of("A", "B", "C"); Set<Integer> set = Set.of(1, 2, 3); Map<String, Integer> map = Map.of("John", 25, "Jane", 23);
三、新的工具和命令
- JShell:这是一个新的命令行工具,它允许你在一个交互式环境中执行 Java 代码,非常适合学习和试验新的代码片段。
- jdeprscan:这是一个新的命令行工具,它扫描一个 jar 文件或者其他的类文件集合,报告哪些 API 已经被废弃,以及它们在被扫描的类文件中的使用情况。
- Javadoc 的 HTML5 支持:Javadoc 工具现在支持生成 HTML5 格式的文档。
- 改进的 JVM 诊断工具 (JCMD):在 JDK 9 中,JCMD 工具的功能得到了增强,它可以显示 Java Flight Recorder 的配置,以及对系统属性的设置。
- 除了这些,还有许多其他的改进,例如对 Unicode 的支持,新的编译器控制,等等。
此外,JDK 9 还包括许多其他的改进和更新,例如改进了垃圾回收器、优化了编译器、增强了安全性等。
总之,JDK 9 相对于 JDK 8 带来了许多重要的变化和特性,使得 Java 开发变得更加高效和便捷。