资讯动态

Java9~Java11部分常用的新特性总结

发布时间:2026/9/25 13:56:16 来源:尧图企业网站定制
目录前言Java91.Java平台模块系统模块化2.接口中的私有方法3.集合类的of方法4.StreamAPI增强 钻石表达式扩展至匿名内部类5.String底层数据结构的改动Java10Java111.String API增强2.低延迟垃圾回收器前言大家好好久都没有在CSDN上和大家分享技术了最近在家闲来无事就顺手看了一下关于Java9到Java11的内容那么在这篇文章中就和大家分享一下这其中的一些新特性吧并不是所有的新特性我这里只挑选了常用的、可能在开发中接触到的新特性Java91.Java平台模块系统模块化这个其实就是Java8到Java9最大、最核心的改动了引入了 module 的概念用于定义代码的封装和依赖关系通过在项目中创建 module-info.java 文件来声明 模块名称、导出的包以及所依赖的模块。案例如下⬇️⬇️⬇️一个 OrderService 订单业务类然后通过 module Module.Test.One 将其所在的 package 包导出然后在 OrderTest 订单测试类中借助 module Java_9_New_Feature 将需要的模块引入这样就可以调用 OrderService 类中的方法了。package com.alibaba.service; public class OrderService { public void success() { System.out.println(订单已支付成功); } }module Module.Test.One { exports com.alibaba.service; }module Java_9_New_Feature { requires Module.Test.One; }package com.alibaba.one; import com.alibaba.service.OrderService; public class OrderTest { public static void main(String[] args) { OrderService orderService new OrderService(); orderService.success(); } } // 订单已支付成功2.接口中的私有方法在Java8的时候接口中只能定义抽象方法、静态方法、默认方法那么来到了Java9接口中又可以定义私有方法了。案例如下⬇️⬇️⬇️package com.alibaba.two; public interface MyInterface { // 抽象方法 String createOrder(); // 静态方法 static void methodOne() { commonAction(); System.out.println(methodOne); } // 默认方法 default void methodTwo() { commonAction(); System.out.println(methodTwo); } // 私有方法 private static void commonAction() { System.out.println(common action...); } }package com.alibaba.two; public class MyInterFaceImpl implements MyInterface { Override public String createOrder() { String orderNo order_no_20260418110422; System.out.println(订单已创建成功订单号 orderNo); return orderNo; } public static void main(String[] args) { // 调用静态方法内部调用私有方法 MyInterface.methodOne(); MyInterface mi new MyInterFaceImpl(); // 调用默认方法内部调用私有方法 mi.methodTwo(); // 调用抽象方法 mi.createOrder(); } } /* common action... methodOne common action... methodTwo 订单已创建成功订单号order_no_20260418110422 */3.集合类的of方法Java9提供了针对 List、Set、Map 这些集合的静态方法 of、copyOf 用来在现有集合的基础上创建不可变的新集合好处就是代码更简洁创建的新集合是不可变的、线程安全的。案例如下⬇️⬇️⬇️package com.alibaba.four; import java.util.List; import java.util.Map; import java.util.Set; public class UnModifiableCollectionTest { public static void main(String[] args) { try { ListString list List.of(Java, C, Python); list.add(Golang); } catch (UnsupportedOperationException ex) { ex.printStackTrace(); } try { SetString set Set.of(Java, C, Python); set.add(Golang); } catch (UnsupportedOperationException ex) { ex.printStackTrace(); } try { MapInteger, String map Map.of(1, Java, 2, C, 3, Python); map.put(4, Golang); } catch (UnsupportedOperationException ex) { ex.printStackTrace(); } } } // 以上代码运行都会报异常UnsupportedOperationException 因为of方法创建的新集合都是不可变的4.StreamAPI增强 钻石表达式扩展至匿名内部类这里就针对 takeWhile、dropWhile、ofNullable 方法进行举例注释写的很清楚了。案例如下⬇️⬇️⬇️package com.alibaba.five; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class StreamAPITest { public static void main(String[] args) { ListInteger numbers List.of(1, 3, 6, 2, 4); // 取所有小于5的数字遇到大于等于5的终止返回前面部分 ListInteger res1 numbers.stream().takeWhile(item - item 5).collect(Collectors.toList()); System.out.println(res1); // 丢弃所有小于5的数字遇到大于等于5的终止返回剩余部分 ListInteger res2 numbers.stream().dropWhile(item - item 5).collect(Collectors.toList()); System.out.println(res2); String fullName Jack; String nickname null; Stream.ofNullable(fullName).forEach(System.out::println); // Jack // 创建一个空流不会输出NPE StreamString stream Stream.ofNullable(nickname); System.out.println(stream.count()); // 0 // 钻石表达式扩展至匿名内部类当中下面会报异常只是为了说明钻石表达式增强了 numbers.sort(new Comparator() { Override public int compare(Integer o1, Integer o2) { return 0; } }); } } /* [1, 3] [6, 2, 4] Jack 0 */5.String底层数据结构的改动// Java8及以前 public final class String { private final char[] value; // 使用char类型数组存储 private int hash; // 哈希码 } // Java9及以后 public final class String { private final byte[] value; // 使用byte类型数组存储 private final byte coder; // 编码标志 (0: LATIN1 1: UTF16) private int hash; // 哈希码 }那么为什么会这样改动原因如下⬇️⬇️⬇️在Java8中无论 String 字符串中存了什么内容都是固定的char 类型占用2个字节去存储但是据统计实际开发中大量的字符串都只包含 ISO-8859-1LATIN-1字符集中的字符这类字符往往仅需1个字节就可以表示所以对于实现这类字符串来说有50%的内存空间都被浪费了。。。所以为了更好的节省内存同时兼容Unicode编码Java9及以后针对 String 引入了双重编码机制就是通过上面的 coder 变量来指示coder 0LATIN-1当字符串中的所有字符都能用 LATIN-1 编码表示时就使用这种编码此时 byte[] value 数组中的每个元素存储一个字符占用1个字节。此时与Java8相比内存空间直接省了一半。coder 1UTF-16当字符串中包含任何 LATIN-1 无法表示的字符时就退回到 UTF-16 编码此时 byte[] value 数组中的每两个元素存储一个字符占用2个字节。此时与Java8是等效的没有内存损失。Java10直接过了大家有兴趣了话可以去了解一下。。。Java111.String API增强isBlank()判断字符串是否为空白仅包含空白字符或长度为0strip()去除字符串首尾的空白字符stripLeading()去除字符串开头的空白字符stripTrailing()去除字符串结尾的空白字符repeat(int count)将字符串重复 count 次拼接count 为0时返回空字符串lines()将字符串按换行符\n、\r分割成 Stream 流。package com.alibaba.three; import java.util.List; import java.util.stream.Collectors; public class StringTest { public static void main(String[] args) { // test isBlank() String s1 \t\n ; System.out.println(s1.length()); // 5 System.out.println(s1.isEmpty()); // false System.out.println(.equals(s1)); // false System.out.println(s1.isBlank()); // true System.out.println(---------------------------); String s2 ; System.out.println(s2.length()); // 0 System.out.println(s2.isEmpty()); // true System.out.println(.equals(s2)); // true System.out.println(s2.isBlank()); // true System.out.println(---------------------------); // test strip() stripLeading() stripTrailing() System.out.println([ \t hello .strip() ]); System.out.println([ \t hello .stripLeading() ]); System.out.println([ \t hello .stripTrailing() ]); System.out.println(---------------------------); // test repeat(int count) System.out.println(java.repeat(3)); System.out.println(java.repeat(0)); System.out.println(---------------------------); // test lines() ListString strList java\nc\npython\ngo.lines().collect(Collectors.toList()); for (String str : strList) { System.out.println(str); } } }2.低延迟垃圾回收器Epsilon提供一个无操作的垃圾回收器仅负责内存分配当 JVM 堆内存耗尽时直接退出抛出OOM不执行任何垃圾回收动作因此也就没有GC停顿它的设计初衷是性能基准测试工具和低延迟场景的对照组此垃圾回收器体积极小。ZGC对比 Epsilon 了话ZGC 主要用于生产环境的低延迟垃圾回收器Java团队对 ZGC 的维护和升级非常频繁未来很有可能是 Java 又一个主流支持的垃圾回收器目前默认是G1。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑