当前位置: 首页 > article >正文

聊聊主流几个JDK版本:JDK 8、JDK 11、JDK 17 和 JDK 21 的区别

聊聊主流几个JDK版本:JDK 8、JDK 11、JDK 17 和 JDK 21 的区别

    • 一、JDK8
    • 二、JDK11
    • 三、JDK17
    • 四、JDK21

一、JDK8

      JDK 8 发布于 2014 年,是 Java 语言的一个重要里程碑,带来了许多革命性的特性,改变了 Java 开发的方式。

主要更新的特性:

  1. Stream API:stream流,用于处理集合的全新方式,允许开发者用声明式的方式操作数据流,极大地减少了复杂的迭代代码。

    List<Integer> list = Arrays.asList(1,2,3,4,5,6);
    list.stream().filter(i -> i>3).forEach(System.out:println);
    
  2. Lambda 表达式: JDK 8 最重要的特性之一,Java 开始支持函数式编程。它大大简化了代码编写,尤其是在集合框架和流处理(Stream API)中表现尤为突出。

    List<Integer> list = Arrays.asList(1,2,3,4,5,6);
    list.forEach(i -> System.out.println(i));
    
  3. 默认方法允许接口定义带有实现的方法(默认方法),这样接口的演进可以在不破坏现有实现的情况下进行。

    interface TestInterface{
    	default void preHi(){
    		System.out.println("进入测试接口....");
    	}
    }
    
  4. Optional 类:通过 Optional 类解决可能出现的空指针异常,增强了代码的安全性。

    Optional optional = Optional.ofNullable(getName());
    optional.ifPresent(System.out:println);
    

二、JDK11

      JDK 11 于 2018 年发布,是继 JDK 8 之后的首个长期支持版本(LTS)。增加了一些功能改进,并移除了 JDK 8 中的一些过时功能。

主要新特性:

  1. 字符串处理增强:JDK 11 为字符串类增加了许多新的方法,如 isBlank(), strip(), lines() 等。

    String str = "我是itfuture";
    System.out.println(str.isBlank()); 
    
  2. 局部变量类型推断(var):让开发者可以在声明局部变量时使用 var 关键字来推断类型,从而减少冗长的代码。

    var optional = Optional.ofNullable(getName());
    
  3. HttpClient API:JDK 11 标准化了新的 HTTP 客户端 API,简化了 HTTP 请求的处理。

    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
    		.uri(URI.create("https://www.baidu.com"))
    		.build();
    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println(response.body());
    
  4. ZGC(Z Garbage Collector):ZGC 是一个低延迟垃圾回收器,专为处理大内存应用设计,能够大幅度减少 GC 暂停时间。

  5. JDK 11 移除了许多不再使用的模块,例如 CORBA和JavaFX ,从而让 JDK 变得更为精简。

三、JDK17

      JDK 17 于 2021 年发布,是另一个 LTS 版本。它继续改进语言功能,并引入了一些实验性的增强。

主要新特性:

  1. Switch 表达式:JDK 17 标准化了 switch 表达式,使其可以返回值,并简化了 case 语句的语法

    String sexRes = switch(sex){
    	case 0 -> "女";
    	case 1 -> "男";
    	default "未知";
    };
    
  2. 记录类(Records):记录类提供了一种简洁的方式来声明不可变的数据类,自动生成构造函数、equals()、hashCode() 和 toString()

    public record Point(int x, int y) {}
    
  3. 密封类(Sealed Classes):密封类允许开发者显式地定义可以继承某个类的子类,从而为继承体系提供了更严格的控制。—sealed class XxxXxx permits Xxx,Yyy{}

    public abstract sealed class Shape permits Circle, Square { }
    public final class Circle extends Shape { }
    public final class Square extends Shape { }
    
  4. JEP 356:增强的 Pseudo-Random Number Generators:这个特性引入了新的随机数生成器,提供了更多种类的伪随机数生成算法。

      JDK 17 被认为是继 JDK 11 之后的另一个重大里程碑版本,提供了更多的语言特性和工具,特别是在提升代码可读性和表达能力方面。

四、JDK21

      JDK 21 于 2023 年发布,进一步推动了 Java 的现代化和性能提升。
      JDK 21 并没有重大语言特性上的变化,但它在性能、工具支持和开发者体验方面做了大量改进。

主要新特性:

  1. 虚拟线程(Project Loom):引入了轻量级的虚拟线程,极大地简化了并发编程。开发者可以创建数百万个线程,而不必担心传统线程的开销问题

    Thread.startVirtualThread(() -> {
        System.out.println("Running in a virtual thread");
    });
    
    
  2. 模式匹配(Pattern Matching)扩展:JDK 21 继续改进模式匹配,特别是在 switch 表达式中引入了更多的匹配能力。

    switch (obj) {
        case Integer i -> System.out.println("Integer: " + i);
        case String s -> System.out.println("String: " + s);
    }
    
    
  3. JEP 434:结构化并发:通过结构化并发 API 简化并发任务的管理,帮助开发者更好地组织并行任务。

  4. JEP 439:值对象(Value Objects):JDK 21 引入了值对象,旨在简化只关心值、不关心对象身份的类的创建。

      由这些版本的变化,我们可以很清楚的看到Java社区的丰富以及Java语言的不断进步,与时俱进。但是呢,选择合适的 JDK 版本取决于项目的需求和应用场景,如果你追求长期支持,可以优先考虑 JDK 11 或 JDK 17,而如果想体验 Java 语言的最新特性,JDK 21 将是你的不二选择。


http://www.kler.cn/a/406515.html

相关文章:

  • VSCode【下载】【安装】【汉化】【配置C++环境】【运行调试】(Windows环境)
  • 课程考核 三道模拟题
  • IDEA2023 SpringBoot整合MyBatis(三)
  • PVE的优化与温度监控(二)—无法识别移动硬盘S.M.A.R.T信息的思考并解决
  • Android Surfaceflinger显示图层合成方式
  • UCI Heart Disease Data Set—— UCI 心脏病数据集介绍
  • summernote富文本批量上传音频,视频等附件
  • ftdi_sio应用学习笔记 4 - I2C
  • Mesh路由组网
  • 端到端的专线管理与运维:实时掌握专线的运行状态
  • python pytorch 加载MNIST训练集,解释
  • 谁的年龄最小(结构体专题)
  • udp_socket
  • 初级数据结构——栈与队列的互相实现
  • 【倍数问题——同余系】
  • PDF电子发票信息转excel信息汇总
  • Elasticsearch 分词器
  • “人工智能+高职”:VR虚拟仿真实训室的发展前景
  • 安装多个nodejs版本(nvm)
  • 2024年11月最新版Adobe PhotoShop(26.0)中文版下载
  • 高性能网络SIG月度动态: 推进SMC支持基于eBPF透明替换和内存水位限制等多项功能支持
  • 在线pdf转word免费工具
  • AI科技赋能,探索人力资源管理软件的高效应用
  • C++11异步操作——std::future
  • 即时通讯app入侵了 怎么办?
  • 浦语提示词工程实践(LangGPT版,服务器上部署internlm2-chat-1_8b,踩坑很多才完成的详细教程,)