Java9新特性简介
Java9
Java9正式发布于2017年9月21日,Java9 带来了很多重大的变化,其中最重要的改动是Java平台模块系统的引入。
Java 平台模块系统
Java平台模块系统,也就是Project Jigsaw,把模块化开发实践引入到了Java平台。在引入了模块系统中之后,JDK被重新组织成94个模块。Java应用可以通过新增的jlink工具,创建出只包含所以来的JDK模块的自定义运行镜像。这样可以减少Java运行时的环境大小。可以节省很多存储空间和内存。
集合、Stream和Optional
在集合中,Java9增加了List.of()、Set.of()、Map.of()、Map.ofEntries()等工厂发给发来创建不可变集合。
public static void main(String[] args) {
List.of("Hello", "World");
Set.of("Hello", "Hello");
Map.of("key", "value");
Map.ofEntries(Map.entry("Nice", "Lucy"));
}
Stream中增加了新的方法ofNullable、dropWhile、takeWhlile和iterate
//dropWhile long count = Stream.of(1, 2, 13, 14). //删除奇数 dropWhile(number -> number % 2 != 0).count(); System.out.println(count);
Collectors 中新增了filtering和filterMapping方法
// Collectors 中增加了新的方法 filtering 和 flatMapping final List<Integer> result = Stream.of("a", "ab", "abc") //把参数映射成Integer类型 然后放入List当中 .collect(Collectors.flatMapping(v -> v.chars().boxed(), Collectors.toList())); result.forEach(e -> { System.out.println(result); });
Optional类新增了ifPresentOrElse、or和Stream等方法
//Optional的ifPresentOrElse方法 Optional.of(result).ifPresentOrElse(consumer -> System.out.println("对象不为Null"), () -> System.out.println("user对象为null")); //Stream<Optional<T>> Stream.of(Optional.of("1"), Optional.empty()) //如果元素为null则不反悔 .flatMap(Optional::stream).count();
反应式流
反应式编程的思想最近得到了广泛的流行,在Java平台上又刘翔的反应式库RxJava和Reactor。反应式流规范的出发点是提供一个带非阻塞负压的异步流处理规范,反应式规范的核心接口已经被加入到了java.util.concurrent.Flow类中
IO流新特性
InputStream当中新增了新的方法来读取和复制InputStream中包含的数据
readAllBytes 读取InputStream中的所有剩余字节
readNBytes 从InputStream 中读取指定数量的字节到数组中
transferTo 读取InputStream 中的全部字节并写入到指定的OutPutSteam中
//一次性读取所有字节
File file = new File("test.txt");
InputStream inputStream = new FileInputStream(file);
byte[] bytes = inputStream.readAllBytes();
System.out.println(new String(bytes));
//transfrTo写入到output当中去
File outFile = new File("out.txt");
OutputStream outputStream = new FileOutputStream(outFile);
//一次性读取所有字节到outputStream中
inputStream.transferTo(outputStream);
inputStream.close();
outputStream.close();
改进应用安全性能
Java9 新增了4个SHA-3哈希算法,SHA3-224,SHA3-256,SHA3-384和SHA3-512。另外也增加了通过java.security.SecureRandom生成使用DRBG算法的强随机数。
import org.apache.commons.codec.binary.Hex; public class SHA3 { public static void main(final String[] args) throws NoSuchAlgorithmException { final MessageDigest instance = MessageDigest.getInstance("SHA3-224"); final byte[] digest = instance.digest("".getBytes()); System.out.println(Hex.encodeHexString(digest)); } }
接口中私有方法
在Java9中允许在接口当中使用私有方法。
ublic interface InterfaceTest { private String buildMessage() { return "Hello"; } void sayHi(final String message); default void sayHi() { sayHi(buildMessage()); } }