Java 9发布了哪些新特性/功能?

Java 9发布了哪些新特性/功能?

javajava 9new features
1
296
小课
小课2022-05-08 16:10
1 个回答

Java 9是在2017年发布的,其主要功能和特性包括:

REPL (JShell)

它是一个交互式编程工具,可以让我们在命令行中以交互式的形式编写和执行Java代码。

jshell> "1,2,3,4,5".split(",")
$1 ==> String[5] { "1", "2", "3", "4", "5" }
Module System

Java 9 引入模块系统,一是用于拆分现有JDK和JRE的自带库,比如说rt.jar多达几十M,如果能够模块化拆分,就可以按需引入。二是可以更加细化访问权限,比如有两个模块,service和main,service模块下的InternalClass是public的,对模块内部所有的类都可见,但是不想让外部依赖它的项目可见,我们可以通过模块系统来实现。

1main
2│   └── src
3│       ├── com.zhixing.main
4│       │           └── Main.java
5│       └── module-info.java
6service
7    └── src
8        ├── com.zhixing.service
9        │           ├── Service.java
10        │           └── internal
11        │               └── InternalClass.java
12        └── module-info.java

目录结构如上,service模块只导出com.zhixing.service包,也就是说其它依赖service模块的只能访问这个包下面的类,不包括子包,它的module-info.java如下:

module zhixing.service {
    exports com.zhixing.service;
}

main模块直接引入service模块即可,它可以访问service模块的Service类,但是不能访问InternalClass类。它的module-info.java如下:

module zhixing.demo {
    requires zhixing.service;
}
Factory Methods for Immutable List, Set, Map, and Map.Entry

新增了一些方便创建不可变的List,Set和Map的接口。

jshell> List<Integer> list = List.of(1, 2, 3, 4, 5)
list ==> [1, 2, 3, 4, 5]
jshell> Map<String, Integer> map = Map.of("one", 1, "two", 2)
map ==> {one=1, two=2}
Private methods in Interfaces

在Java 8 中,我们可以给接口定义default方法,在Java 9 中可以给接口定义私有private方法。

public interface IService {
    default void defaultMethod() {
        ...
        privateMethod();
        ...
    }
    
    private void privateMethod() { }
}

以上只是Java 9发布的部分特性和功能,完整的特性可参考官方文档

1
已修改
小课
小课2022-05-08 21:17
你的回答

内容