JDK 各版本部分特性说明

JDK 各版本部分特性说明

jdk1.8

  1. Lambda 表达式和函数式接口
    定义: 允许将函数作为一个方法的参数(函数作为参数)或将代码作为数据(函数作为值)。
    示例:(a, b) -> a + b
    说明: 通过invokedynamic指令实现() ‐> { 代码语句 }的函数形式代替内部匿名类。lambda在编译时,不会创建一个单独的class文件,说明编译之后lambda并不是以匿名内部类的形式存在。
  2. 类型注解
    定义:提供了在任何使用类型的地方添加注解的能力。
    示例:@NonNull String name;
  3. 新的日期/时间 API
    定义:全新的API,用于日期和时间的操作,替代旧的Date和Calendar。
    示例:LocalDate.now();
  4. 默认方法和静态方法
    定义:允许在接口中定义有具体实现的方法,不破坏与旧版本的兼容性。
    示例:default void show() { System.out.println(“Default Method”); }
  5. Stream API
    定义:新的抽象,允许以函数式方式处理数据序列。
    示例:list.stream().filter(x -> x > 5).collect(Collectors.toList());
  6. Nashorn JavaScript 引擎
    定义:一个新的JavaScript引擎,用于在Java应用程序中执行JavaScript代码。
    示例:ScriptEngine engine = new ScriptEngineManager().getEngineByName(“nashorn”);
  7. 类加载器改进
    定义:对类加载器进行的一系列改进,提高其性能和灵活性。
    示例:使用ClassLoader的新方法和改进。
  8. 并行数组操作
    定义:提供并行处理数组的能力,利用多核处理器的优势。
    示例:Arrays.parallelSort(myArray);
  9. 改进的线程局部变量
    定义:对ThreadLocal类的增强,以更高效地存储线程特定的数据。
    示例:ThreadLocal threadLocal = ThreadLocal.withInitial(() -> 0);
  10. Optional 类型

定义:一个可以包含或不包含值的容器对象,可以有效地表示“值或无值”并避免null。
示例:Optional<String> optional = Optional.of("test");

public static void hello(String str){
    if(str != null) {
        System.out.println(str.toLowerCase());
    }
}

可写为

public static void hello(String str){
    Optional
            .ofNullable(str)   //将str包装进Optional
            .ifPresent(s -> {   //ifPresent表示只有对象不为null才会执行里面的逻辑,实现一个Consumer(接受一个参数,返回值为void)
                System.out.println(s);   
            });
}
或
public static void hello(String str){
    Optional
            .ofNullable(str)   //将str包装进Optional
            .ifPresent(System.out::println);  
      //println也是接受一个String参数,返回void,所以这里使用我们前面提到的方法引用的写法
}

jdk1.9

  1. Jigsaw 模块化系统 (JPMS)
    定义:为Java引入的模块系统,允许将应用程序或库划分为不同的模块。
    示例:module com.myapp { requires java.base; }
  2. 钻石操作符的适用范围扩展
    定义:允许在匿名内部类中使用钻石操作符,使代码更简洁。
    示例:Handler<String> handler = new Handler<>() { /*...*/ };
  3. 接口私有方法
    定义:在接口中定义私有方法,帮助组织方法实现,而不暴露给外部。
    示例:interface MyInterface { private void myPrivateMethod() { /*...*/ } }
  4. 改进的 try-with-resources 语句
    定义:允许在try-with-resources语句中引用在外部声明的final或effectively final变量。
    示例:
  final Resource resource = new Resource();
  try (resource) { /*...*/ }
  1. 改进的 Optional 类型
    定义:为Optional添加了新的有用的方法。
    示例:optional.orElseThrow();
  2. 改进的 Stream API
    定义:为Stream添加了新的方法和特性。
    示例:list.stream().takeWhile(x -> x < 5).collect(Collectors.toList());
  3. 集合工厂方法
    定义:简洁的方法创建不可变集合。
    示例:List list = List.of(“A”, “B”, “C”);
  4. Flow API
    定义:定义了发布-订阅框架的标准。
    示例:使用Flow.Publisher, Flow.Subscriber等进行响应式编程。
  5. 改进的 Javadoc
    定义:Javadoc工具的改进,包括更好的HTML5支持和搜索功能。
    示例:生成的Javadoc页面中的搜索框。
  6. 改进的 Process API
    定义:改进的API,用于管理和控制操作系统进程。
    示例:ProcessHandle.current().pid();
  7. 改进的 HTTP/2 客户端
    定义:引入了新的HTTP/2客户端API,替代HttpURLConnection。
    示例:使用HttpClient, HttpRequest, HttpResponse进行HTTP请求。
  8. JShell交互式编程
    Java 9为我们通过了一种交互式编程工具JShell
  9. 集合类新增工厂方法
    Map<String, Integer> map = Map.of("AAA", 18, "BBB", 20);
  10. 改进的 Stream API
Stream
    .of(null)   //如果传入null会报错
    .forEach(System.out::println);

jdk 10

  1. 局部变量类型推断
    定义:允许Java编译器推断局部变量的类型,使代码更简洁。
    示例:var list = new ArrayList<String>();
  2. 并行全垃圾回收器
    定义:并行GC的改进,使其能够在Full GC阶段并行处理。
    示例:在JVM启动参数中使用-XX:+UseParallelGC。
  3. 应用类数据共享
    定义:允许应用程序之间共享类元数据,以减少启动时间和JVM内存使用。
    示例:在JVM启动参数中使用-XX:+UseAppCDS。
  4. 基于时间的版本控制
    定义:新的版本命名策略,基于时间而不是任意命名。
    示例:使用如10.2018.04这样的版本号。

jdk 11

Java 11 是继Java 8之后的又一个TLS长期维护版本,在Java 17出现之前,一直都是此版本作为广泛使用的版本,其中比较关键的是用于Lambda的形参局部变量语法。

  1. 支持lambda中使用 var
Counsumer<String> consumer = (var str)->{}
  1. 针对于String类的方法增强
var str = "AB\nC\nD";
System.out.println(str.isBlank());    //isBlank方法用于判断是否字符串为空或者是仅包含空格
str
    .lines()   //根据字符串中的\n换行符进行切割,分为多个字符串,并转换为Stream进行操作
    .forEach(System.out::println);

String str = "ABCD";   //比如现在我们有一个ABCD,但是现在我们想要一个ABCDABCD这样的基于原本字符串的重复字符串
System.out.println(str.repeat(2));  //一个repeat就搞定了

String str = " A B C D ";
System.out.println(str.strip());   //去除首尾空格
System.out.println(str.stripLeading());  //去除首部空格
System.out.println(str.stripTrailing());   //去除尾部空格

  1. HTTP/2 客户端增强
    定义:HTTP/2的正式客户端,代替JDK 9中的试验版本。
    示例:使用HttpClient, HttpRequest, 和HttpResponse进行HTTP/2请求。新的API支持最新的HTTP2和WebSocket协议。
public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {
    HttpClient client = HttpClient.newHttpClient();   //直接创建一个新的HttpClient
      //现在我们只需要构造一个Http请求实体,就可以让客户端帮助我们发送出去了(实际上就跟浏览器访问类似)
    HttpRequest request = HttpRequest.newBuilder().uri(new URI("https://www.baidu.com")).build();
      //现在我们就可以把请求发送出去了,注意send方法后面还需要一个响应体处理器(内置了很多)这里我们选择ofString直接吧响应实体转换为String字符串
    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
      //来看看响应实体是什么吧
    System.out.println(response.body());
}
  1. 单元测试框架 JUnit 5
    定义:新的单元测试框架,提供了许多新特性和改进。
    示例:@Test和Assertions.assertEquals(expected, actual);
  2. ZGC 垃圾回收器
    定义:一个可扩展的低延迟垃圾回收器。
    示例:在JVM启动参数中使用-XX:+UseZGC。
  3. 改进的启动器
    定义:允许直接运行源代码文件,无需先编译。
    示例:运行java MyFile.java直接执行Java源代码。
  4. Unicode 10.0 支持
    定义:支持最新的Unicode标准,增加了新的字符集。
  5. 原生 TLS 1.3 支持
    定义:增加了对最新的安全传输层协议的支持。
  6. 改进的 Epsilon 垃圾回收器
    定义:一个不做任何内存回收的垃圾回收器,主要用于性能测试。
    示例:在JVM启动参数中使用-XX:+UseEpsilonGC。

jdk 12

  1. Shenandoah 垃圾回收器
    定义:一个低延迟的并发垃圾回收器。
    示例:在JVM启动参数中使用-XX:+UseShenandoahGC。
  2. 默认 CDS 归档
    定义:提高启动速度通过默认的类数据共享归档。
    示例:使用JVM参数-Xshare:auto。
  3. 增强的 Switch 语句
    定义:为Switch语句添加多值情况和其他增强功能。
    示例:switch (day) { case MONDAY, TUESDAY -> System.out.println(“Early week”); }
  4. 改进的 G1 清理阶段

定义:优化G1垃圾回收器的清理阶段,提高性能。
5. 改进的 AArch64 处理器支持

定义:增强了对AArch64架构的支持和优化。

JDK 13

1.改进的 Switch 表达式
定义:Switch表达式的进一步改进,提供更简洁的语法。
示例:int num = switch (day) { case MONDAY -> 1; case TUESDAY -> 2; };
2. Text Blocks
定义:允许多行字符串,使字符串字面值更加简洁。编写复杂字符串,这样就不用再去用那么多的转义字符了.
示例:

String s = """ 
    adsdf"dfd"/df\sdfds
""";
  1. ZGC 调整策略
    定义:ZGC的优化和调整,以更好地应对不同的工作负载。
  2. 通过 JVM 选项打印垃圾回收事件
    定义:更详细的垃圾回收日志选项,帮助调试和性能分析。
  3. ZGC 和 Shenandoah 增加副本数
    定义:这两种垃圾回收器的改进,以提高效率和吞吐量。

JDK 14

  1. Switch 表达式增强
    定义:进一步的Switch表达式增强,使其更加功能强大和灵活。
public static String grade(int score){
    score /= 10;  //既然分数段都是整数,那就直接整除10
    return switch (score) {   //增强版switch语法
        case 10, 9 -> "优秀";   //语法那是相当的简洁,而且也不需要我们自己考虑break或是return来结束switch了(有时候就容易忘记,这样的话就算忘记也没事了)
        case 8, 7 -> "良好"; 
        case 6 -> "及格";
        default -> "不及格";
    };
}
  1. 简化的局部变量类型推断, 新的instanceof语法
    定义:进一步简化了局部变量的类型推断,使代码更加简洁。
if(obj instanceof Student student) {   //首先判断是否为Student类型

    return student.name.equals(this.name);  //最后比对属性是否一样
}
  1. 特定的 NullPointerException 堆栈跟踪
    定义:当发生NullPointerException时,提供更详细的信息来确定问题的来源。
  2. Pattern Matching for instanceof
    定义:简化了instanceof操作的类型检查和类型转换。
    示例:if (obj instanceof String s) { System.out.println(s.length()); }
  3. 双倍精度浮点数和整数算术操作 API
    定义:新增的API,支持大数字的浮点和整数运算。
    示例:使用Math.multiplyExact, Math.addExact等方法。

JDK 15

  1. 全局垃圾收集器
    定义:一个实验性的垃圾收集器,旨在为所有内存分配提供低延迟。
  2. 改进的 G1 垃圾回收器
    定义:对G1垃圾回收器的继续改进,提高其性能和效率。
  3. 简化的元注解语法
    定义:提供了一种简化的方式来指定注解的目标类型。
    示例:@Target(TYPE_USE) @interface NonNull {}
  4. Records 类型(预览功能)
    定义:为简单的数据传输对象提供一个简洁的语法。
    示例:record Point(int x, int y) {}
  5. 改进的 ZGC
    定义:对ZGC垃圾收集器的进一步优化和改进。

JDK 16

  1. record 记录类型
    记录类型在Java 16才正式开放使用
public record Account(String username, String password) {  //直接把字段写在括号中

}
  1. 更好的垃圾回收日志信息
    定义:增强了垃圾回收日志的详细度和可读性。
  2. 改进的 Vector API
    定义:为SIMD硬件指令提供了Java API,允许更高效的并行计算。
    示例:使用Vector类进行并行操作。
  3. 操作系统信息访问 API
    定义:提供API来查询和访问操作系统的详细信息。
    示例:使用OperatingSystemMXBean。
  4. 优化的方法/调用 API
    定义:改进的方法调用API,提供更高的性能和灵活性。
  5. 改进的 AES 密码算法实现
    定义:提供了更高效的AES加密和解密实现。

jdk 17

  1. 密封类型
    在Java中,我们可以通过继承(extends关键字)来实现类的能力复用、扩展与增强。但有的时候,可能并不是所有的类我们都希望能够被继承。所以,我们需要对继承关系有一些限制的控制手段,而密封类的作用就是限制类的继承。
public sealed class A permits B{   //在class关键字前添加sealed关键字,表示此类为密封类型,permits后面跟上允许继承的类型,多个子类使用逗号隔开

}

密封类型有以下要求:
1、可以基于普通类、抽象类、接口,也可以是继承自其他接抽象类的子类或是实现其他接口的类等。
2、必须有子类继承,且不能是匿名内部类或是lambda的形式。
3、sealed写在原来final的位置,但是不能和final、non-sealed关键字同时出现,只能选择其一。
4、继承的子类必须显式标记为final、sealed或是non-sealed类型。

  1. 嵌套的代码块作用域
    定义:允许在单个方法或代码块中定义多个嵌套的作用域。
    示例:
{
    int x = 10;
    {
        int y = 5;
        System.out.println(x + y);
    }
}
  1. 自定义的垃圾回收器策略
    定义:允许开发者使用自定义的垃圾回收策略。
  2. 支持 C++ 14 语言特性
    定义:JVM的内部代码现在可以使用C++ 14的语言特性。
  3. 改进的弱引用
    定义:对WeakReference类的改进,使其更加高效。
  4. 改进的 ZGC 和 Shenandoah 垃圾回收器
    定义:对这两个垃圾回收器的进一步优化和改进。

JDK 18

  1. 增强的垃圾回收器接口
    定义:提供了更加灵活和强大的垃圾回收器接口。
  2. 支持 Loom 协程的 JVM 机制
    定义:为Java引入的协程支持,提供轻量级的并发模型。
    示例:使用Fiber和FiberScope进行协程编程。
  3. ZGC 和 Shenandoah 垃圾回收器进一步改进
    定义:对这两个垃圾回收器的进一步优化。
  4. 底层 JVM 线程池的重新设计
    定义:对JVM内部线程池的架构进行的重大改进。

参考摘录:
https://blog.csdn.net/WNX10086/article/details/135006982
https://blog.csdn.net/yueerba126/article/details/133487598


若有凝问或错误,请指出,我好及时改正,让我们一起进步!
email : binary_space@126.com
qq : 103 586 2795
敲门砖: 代码谱写人生

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

征客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值