Java

Java9新特性简介

2021-06-24  本文已影响0人  TZX_0710

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());
    }
}

上一篇下一篇

猜你喜欢

热点阅读