大家好,欢迎来到IT知识分享网。
模块系统
模块化最大的意义就是按照功能把代码逻辑分割开来,实际运用主要用来系统瘦身、依赖jar级别的隔离。语法上类似于VUE,多了exports、requires、uses、opens关键字。
JShell
交互式的编程环境
改进Javadoc
Javadoc导出文件现在支持在 API 文档中的进行搜索
多版本兼容 JAR 包
多版本兼容 JAR 功能能让你创建仅在特定版本的 Java 环境中运行库程序时选择使用的 class 版本
javac --release 9 java9/com/runoob/Tester.java javac --release 7 java7/com/runoob/Tester.java jar -c -f test.jar -C java7 . --release 9 -C java9.
集合工厂方法
List,Set 和 Map 接口中,新的静态工厂方法可以创建这些集合的不可变实例
Set<String> set = Set.of("A","B","C"); List<String> list = List.of("A","B","C"); Map<String,String> map = Map.of("A","Apple","B","Boy","C","Cat");
私有接口方法
在 Java 8 接口引入了默认方法和静态方法,仅仅需要使用 default 关键字来定义它们,Java 9 不仅像 Java 8 一样支持接口默认方法,同时还支持私有方法。
改进的进程 API
在 Java 9 之前,Process API 仍然缺乏对使用本地进程的基本支持,例如获取进程的 PID 和所有者,进程的开始时间,进程使用了多少 CPU 时间,多少本地进程正在运行等。
ProcessBuilder pb = new ProcessBuilder("notepad.exe"); String np = "不存在"; Process p = pb.start(); ProcessHandle.Info info = p.info(); System.out.printf("Process ID : %s%n", p.pid()); // 获取进程PID System.out.printf("Command name : %s%n", info.command().orElse(np)); // 获取进程名称 System.out.printf("Command line : %s%n", info.commandLine().orElse(np)); // 获取进程命令行 System.out.printf("Start time: %s%n", info.startInstant().map(i -> i.atZone(ZoneId.systemDefault()) .toLocalDateTime().toString()).orElse(np)); // 获取进程启动时间 System.out.printf("Arguments : %s%n", info.arguments().map(a -> Stream.of(a).collect( Collectors.joining(" "))).orElse(np)); // 获取进程参数 System.out.printf("User : %s%n", info.user().orElse(np)); // 获取进程用户
改进的 Stream API
改进的 Stream API 添加了一些便利的方法,使流处理更容易,并使用收集器编写复杂的查询。
Java 9 为 Stream 新增了几个方法:dropWhile、takeWhile、ofNullable,为 iterate 方法新增了一个重载方法。
takeWhile
takeWhile使用一个断言作为参数,返回给定 Stream 的子集直到断言语句第一次返回 false
Stream.of("a","b","c","","e","f").takeWhile(s->!s.isEmpty()) .forEach(System.out::print); // 打印abc
dropWhile
dropWhile使用一个断言作为参数,直到断言语句第一次返回 false 才返回给定 Stream 的子集
Stream.of("a","b","c","","e","f").dropWhile(s->!s.isEmpty()) .forEach(System.out::print); // 打印ef
iterate
使用初始种子值创建顺序流,并迭代应用指定的下一个方法。 当指定的 hasNext 的 predicate 返回 false 时,迭代停止。
IntStream.iterate(3, x -> x < 10, x -> x+ 3).forEach(System.out::print); // 打印369
ofNullable
可以预防 NullPointerExceptions 异常, 可以通过检查流来避免 null 值。如果指定元素为非 null,则获取一个元素并生成单个元素流,元素为 null 则返回一个空流。
// java 9 之前,因为 Stream.of 方法不处理空对象,会有一个NullPointerException异常,Java 9 则返回一个空流。 Long count = Stream.ofNullable(null).count(); System.out.println(count); // 0
改进 try-with-resources
如果你已经有一个资源是 final 或等效于 final 变量,您可以在 try-with-resources 语句中使用该变量,而无需在 try-with-resources 语句中声明一个新变量。
// Java 8 Reader inputString = new StringReader(message); BufferedReader br = new BufferedReader(inputString); try (BufferedReader br1 = br) { // java 8 需要在try 语句块中声明资源 br1,然后才能使用它 return br1.readLine(); } // Java 9 Reader inputString = new StringReader(message); BufferedReader br = new BufferedReader(inputString); try (br) { // Java 9 不需要声明资源 br 就可以使用它 return br.readLine(); }
改进的弃用注解 @Deprecated
注解 @Deprecated 可以标记 Java API 状态,可以表示被标记的 API 将会被移除,或者已经破坏
改进钻石操作符
匿名类可以使用钻石操作符
改进 Optional 类
Optional 添加了很多新的有用方法,Optional 可以直接转为 stream
stream
stream 方法的作用就是将 Optional 转为一个 Stream,如果该 Optional 中包含值,那么就返回包含这个值的 Stream,否则返回一个空的 Stream
List<Optional<String>> list = Arrays.asList ( Optional.empty(), Optional.of("A"), Optional.empty(), Optional.of("B")); List<String> filteredListJava9 = list.stream() .flatMap(Optional::stream) .collect(Collectors.toList()); System.out.println(filteredListJava9); // 打印[A, B]
ifPresentOrElse
如果 Optional 不包含值,那么 ifPresentOrElse 便会调用 emptyAction
Optional<Integer> optional = Optional.of(1); optional.ifPresentOrElse( x -> System.out.println("Value: " + x),() -> System.out.println("Not Present.")); // 输出:Value: 1 optional = Optional.empty(); optional.ifPresentOrElse( x -> System.out.println("Value: " + x),() -> System.out.println("Not Present.")); // 输出:Not Present.
or
如果值存在,返回 Optional 指定的值,否则返回一个预设的值
Optional<String> optional1 = Optional.of("Mahesh"); Supplier<Optional<String>> supplierString = () -> Optional.of("Not Present"); // 预设的值 optional1 = optional1.or(supplierString); optional1.ifPresent( x -> System.out.println("Value: " + x)); // 输出:Value: Mahesh optional1 = Optional.empty(); optional1 = optional1.or(supplierString); optional1.ifPresent( x -> System.out.println("Value: " + x)); // 输出:Value: Not Present
多分辨率图像 API
定义多分辨率图像API,开发者可以很容易的操作和展示不同分辨率的图像了
改进的 CompletableFuture API
CompletableFuture 类的异步机制可以在 ProcessHandle.onExit 方法退出时执行操作
轻量级的 JSON API
内置了一个轻量级的JSON API
响应式流(Reactive Streams) API
Java 9中引入了新的响应式流 API 来支持 Java 9 中的响应式编程
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/50885.html