Java JDK8以后新特性

实例工厂方法(JDK9)

        借助JDK9的一项新功能,即集合工厂方法,我们可以轻松地使用预定义的数据创建不可变的集合。只需要在特定集合类型上使用of方法。

List<String> list = List.of("A", "B", "C");
Map<Integer, String> map = Map.of(1, "A", 2,"B", 3, "C");
Set<String> set = Set.of("A", "B", "C");

        而在JDK9之前,我们想要创建一个不可变的集合,需要先创建一个可变集合,然后使用 unmodifiableSet 创建不可变集合。

public List<String> getUnmodifiableList() {
 List<String> list = new ArrayList<>();
 list.add("A");
 list.add("B");
 list.add("C");
 return Collections.unmodifiableList(list);
}

改进 try-with-resources(JDK9)

  JDK 9 中不需要在 try 中额外定义一个变量,JDK 9 之前需要这样使用 try-with-resources:


FileInputStream inputStream = new FileInputStream("D:\\aa.txt");
try (InputStream in = inputStream) {
    in.read();
} catch (IOException e) {
    e.printStackTrace();
}

在 Java 9 中可以在try中直接使用 inputStream 变量,不需要再额外定义新的变量了。

FileInputStream inputStream = new FileInputStream("D:\\aa.txt");
        try (inputStream) {
            inputStream.read();
        } catch (IOException e) {
            e.printStackTrace();
        }

String 底层存储结构更换(JDK9)

        JDK8 之前 String 的底层结构类型都是 char [] , 但是 JDK9 就替换成 byte [] 这样来讲,更节省了空间和提高了性能。

      之所以替换是因为 之前一直是最小单位是一个 char,用到两个 byte, 但是 JDK8 是基于 latin1 的,而这个 latin1 编码可以用一个 byte 标识,所以当你数据明明可以用到一个 byte 的时候,我们用到了一个最小单位 chat 两个 byte,就多出了一个 byte 的空间。所以 JDK9 在这一方面进行了更新,现在的 JDK9 是基于 ISO/latin1/Utf-16  ,latin1 和 ISO 用一个 byte 标识,UTF-16 用两个 byte 标识,JDK9 会自动识别用哪个编码,当数据用到 1byte,就会使用 iSO 或者 latin1 ,当空间数据满足 2byte 的时候,自动使用 utf-16, 节省了很多空间。

 同理,StringBuilder StringBuffer 也更换了底层数据结构

局部变量的自动类型推断(var)(JDK10)

var sss = "Hello,JDK 10";
System.out.println(sss);

JDK 10 带来了一个很有意思的语法var,它可以自动推断局部变量的类型,以后再也不用写类型了,也不用靠 lombok 的 var 注解增强了

  不过这个只是语法糖,编译后变量还是有类型的,使用时还是考虑下可维护性的问题,谨慎使用。强调一下,var 关键字目前只能用于局部变量以及 for 循环变量声明中。

文本块(Text Block)(JDK13)

  文本块是多行字符串文字,它避免使用转义序列,并以可预测的方式自动设置字符串格式。它还使开发人员可以控制字符串的格式。从JDK 13开始,文本块可用作预览功能。它们以三个双引号(""")开头,可以轻松地创建和格式化JSON消息。

String ss =  """
           {
                "id": "123",
                "name": "zhangsan"
           }
           """;

JDK 13之前的相同JSON字符串要复杂得多。

String ss =  "{\n" +
            "     \"id\": \"123\",\n" +
            "     \"name\": \"zhangsan\"\n" +
            "}";

ZGC(JDK15)

学习中......

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值