首页 > 其他分享 >必须了解常用的JDK版本及特性

必须了解常用的JDK版本及特性

时间:2024-11-19 17:47:28浏览次数:3  
标签:java JDK JDK17 特性 接口 版本 Optional

在一次面试的时候问到我感兴趣的技术,回答了JAVA,但被问到JDK,除了1.8,就一窍不通,感觉确实应该好好学习一下,至少常见的版本和常见的特性,可以没那么专业,没那么细致,但至少能说个一两句

最喜欢的JDK版本

我最喜欢JDK17,在这个版本有几点比较常见的特性,Switch语句的增强、字符块的成熟、密封类的引入,优化了空指针异常的信息,还有Record类,ZGC垃圾收集器在JDK17都比较成熟了。而且现在Spring6.x以及Spring Boot 3.x支持最低JDK17,而我们也知道,升级JDK版本,可能对上层业务有影响,还有不兼容,项目稳定性的风险。JDK17的用户量增长速度也很快,也富含上面版本的一些特性,也比较成熟稳定,毕竟也没有那么专业,没有理解过多细致的变化,所以综合下来说一个比较喜欢的版本,就算是JDK17吧。

JDK1.8:

Lambda表达式、接口默认方法、Stream API、日期时间 API、Optional类等,

还有元空间代替永久代,改善内存管理;HashMap的优化;

详细介绍:

  1. Lambda 表达式:

    • 允许将功能作为方法参数传递或将代码作为数据处理,极大简化了集合的处理和多线程编程。

    • 例如:

        List<String> list = Arrays.asList("a", "b", "c");
       ​
        list.forEach(item -> System.out.println(item));
  2. Stream API:

    • 提供了一种新的方法来处理集合,支持链式操作、过滤、映射和减少操作,使得集合处理更加简洁和高效。

    • 例如:

        List<String> list = Arrays.asList("a", "b", "c");
       ​
        list.stream()
         .filter(s -> s.startsWith("a"))
         .forEach(System.out::println);
  3. 日期和时间 API:

    • 引入了新的日期和时间库 java.time,取代了旧的 java.util.Date 和 java.util.Calendar,提供了更好的日期和时间处理支持。

    • 例如:

        LocalDate today = LocalDate.now();
        LocalDate birthday = LocalDate.of(1990, Month.JANUARY, 1);
        Period age = Period.between(birthday, today);
  4. 接口默认方法:

    • 允许在接口中定义默认方法,从而为接口添加新的方法而不需要修改实现该接口的现有类。

    • 例如:

        public interface Vehicle {
       ​
         default void print() {
             System.out.println("I am a vehicle");
         }
        }
  5. Nashorn JavaScript 引擎:

    • 引入了一个新的 JavaScript 引擎 Nashorn,允许在 JVM 上执行 JavaScript 代码,提升了与 JavaScript 的互操作性。

    • 例如:

        ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
        engine.eval("print('Hello, Nashorn');");
  6. Optional Class (JEP 126) Optional 类:

    • 引入了 Optional 类来避免空指针异常,提供了一种更优雅的处理可能为空的值的方法。

    • 例如:

        Optional<String> optional = Optional.of("hello");
       ​
        optional.ifPresent(System.out::println);
  7. Metaspace:

    • 将永久代(PermGen)替换为元空间(Metaspace),改善了内存管理。

  8. Compact Profiles (JEP 161) 精简配置:

    • 允许创建包含 JDK 一部分功能的精简配置,从而在资源受限的设备上运行 Java 应用。 这些特性大大提升了 Java 的功能和性能,简化了编程过程,并提供了更多现代化编程的支持。

JDK11:

  • 增加了一些字符串API

  • 在Lambda表达式可以使用var变量,在需要给变量增加注解时,不添加类型修饰会报错

  • 可以使用HttpClients简单调用Http接口(之前都是使用其他框架的调用方式,JDK调用太麻烦)

  • 带来跨时代意义的ZGC出现

JDK17:

switch-case:扩展 switch 语句和表达式进行模式匹配,支持复杂条件检查与操作。

下图是JDK12就推出的,可以将值直接返回需要赋值的变量

79a4b3a2768f45a68c375beb52327f32.png

下图是JDK17推出,可以匹配多个变量,有多行业务代码,也可以使用大括号{}解决,还能对变量类型进行匹配。

5d45b129d7be4296b3c29be8184a7cef.png

ef0a8d58a10c4c28a994fb69dca20576.png

3f54880a82834cd0a384a8d4feac519d.png

字符块的概念:(JDK15提出的)解决恶心的字符串拼接,很多双引号和加号,三个双引号组成字符块,

17还引入两个转义符:

  • \:置于行尾,用来将两行连接为一行

  • \s:单个空白字符

(尤其在使用模版引擎时,需要大量html代码)

6af627ffeef54fc3bfd2d046c6f1bef1.png

instanceof增强:(JDK14提出的,16投入使用)避免需要使用变量的时候,又得强行转换类型。

限制子类继承:sealed关键字,设置类为密封类,permit只能允许哪些类继承,但子类只能用final修饰和non-sealed修饰,控制能否再被子类继承。

好处就是更加安全,可控(限制范围,只能包下)

Record类:(JDK15)类似lombok的属性只读对象,添加record关键字代替class关键字,在编译阶段生产构造器,还有重写相等方法,没有lombok强大,适用场景也不多,不多了解。

优化空指针异常信息:(JDK14)我认为这是比较好的优化。告诉哪个对象为null,以前就只会告诉哪一行,哪个对象只能猜。

ZGC垃圾收集器:(JDK11诞生,JDK15使用,JDK17就比较成熟了)简单来说垃圾回收不卡顿,垃圾回收的时候都会触发STW,只能减少他停顿的时间。ZGC停顿时间是小于10ms。还有个优化手段,堆内存设计很大(十几T级别),就会很少触发GC的次数。

JDK 21

虚拟线程(19提出):一种轻量级的线程实现,可以极大地提高并发编程的性能和可伸缩性。虚拟线程允许开发人员以更低的开销创建和管理大量线程。

有序集合:提供了新的接口用于表示有序集合,例如 List、Set 和 Map 的有序变体,增强了集合操作的灵活性。

结构化并发: 引入了一种新的并发编程模型,简化了并发任务的管理,提高了错误处理和取消操作的可控性。 这些特性和改进旨在提升开发者的生产力,增强 Java 应用的性能和安全性,并确保 Java 在现代开发环境中继续保持竞争力。

ZGC增加分代功能,提高内存管理性能

JDK 22

性能:

  • 对G1垃圾回收器提升了它的一个固定区的一个延迟等待的时间。

语法糖:

  • main方法的简化,不过我感觉也没必要

  • 字符串模版,可以将占位符直接嵌入到字符串当中,可以进行快速的替换

  • 用不到的变量用下划线代替,提高代码可读性

java语法,编译方式:

  • 可以直接通过运行java原文件(JDK11提出,但只能运行一个文件),跟一个文件相关联的其他java文件都可以运行

  • 可以直接在Super和构造方法上面执行一些代码

a515734cf79a49c891f10034a2f95e34.png

0bb9ba00e13b457db3da62a470f49dc8.png

参考:

 B站-徐庶老师视频

详细一点参考:

2024年主流使用的JDK版本及其核心特性介绍-CSDN博客

标签:java,JDK,JDK17,特性,接口,版本,Optional
From: https://blog.csdn.net/qq_62097431/article/details/143663932

相关文章

  • .NET Core 特性(Attribute)底层原理浅谈
    简介烂大街的资料不再赘述,简单来说就是给代码看的注释Attribute的使用场景Attribute不仅仅局限于C#中,在整个.NET框架中都提供了非常大的拓展点,任何地方都有Attribute的影子编译器层比如Obsolete,ConditionalC#层GET,POST,Max,Range,RequireCLRVM层StructLayout,DllImp......
  • Navicat Premium 历史版本下载链接
    NavicatPremium历史版本下载链接NavicatPremium15Windowshttp://download.navicat.com/download/navicat150_premium_cs_x64.exemacOShttp://download.navicat.com/download/navicat150_premium_cs.dmgNavicatPremium16Windowshttp://download.navicat.com/downloa......
  • 适应等保的Windows系统和Linux系统安全加固V1.2.0版本
    《Web安全》http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484238&idx=1&sn=ca66551c31e37b8d726f151265fc9211&chksm=c0e47a12f793f3049fefde6e9ebe9ec4e2c7626b8594511bd314783719c216bd9929962a71e6&scene=21#wechat_redirect《网安面试指南》http:/......
  • MindSpore-2.4版本中的一些新特性
    技术背景在前面的一篇博客中我们介绍了MindSpore-2.4-gpu的安装和其中可能出现的一些问题。这里我们在安装完成之后,可以尝试使用一些MindSpore新版本的特性。那么在安装之后,如果是使用VSCode作为IDE,可以使用ctrl+shift+P快捷键,然后搜索python:sele将Python解释器切换到我们所需要......
  • 解锁C++第二大特性,代码也玩“父子”游戏——继承
    解锁C++第二大特性,代码也玩“父子”游戏——继承文章目录解锁C++第二大特性,代码也玩“父子”游戏——继承前言——封装封装的本质是什么?封装的总结一、继承的基本概念1.1继承的定义二、继承的三种方式2.1私有不可见2.2公有、保护的继承2.3基类和派生类对象赋值......
  • 【JAVA】Java基础—面向对象编程:类的其他特性—静态成员与方法
    在Java中,静态成员和静态方法是类的一部分,而不是类的实例的一部分。这意味着静态成员和方法可以在没有创建类的实例的情况下访问。理解静态成员和方法的概念对于Java开发至关重要,因为它们在内存管理、性能优化和设计模式中扮演着重要角色。理论知识1.静态成员静态变量:也称......
  • 【JAVA】Java基础—面向对象编程:类的其他特性—static 关键字的使用
    在Java编程中,static关键字是一个非常重要的概念,它用于定义类级别的成员,而不是实例级别的成员。理解static的使用对于编写高效、清晰和可维护的代码至关重要。在实际开发中,static关键字通常用于创建工具类、常量、单例模式以及共享数据等场景。理论知识1.static变量静态变......
  • 记录一些旧版本 MySQL 的问题与处理
    旧版本相关资源下载:https://downloads.mysql.com/archives/(以下版本号均为实测版本号,不代表同大版本下的其它小版本行为也会一致)1、MySQL5.1.46版本-使用命令或服务运行数据库时,不需要也不支持通过参数初始化数据库(下载的压缩包内已有初始数据)-默认的root用户密码为空,所......
  • Windows系统下载并配置JDK23(超详细!!!)
    一、下载JDK23下载JDK23可移步主页在上一篇文档中查看具体步骤......二、安装JDK231、双击安装包:        找到下载的JDK23安装包文件,双击打开。2、运行安装程序:        按照安装程序中的提示,点击“下一步”等按钮进行安装。        在选择安装......
  • 100 款支持 .NET 多版本的强大 WPF 控件库
    前言推荐一款集成了超过100款控件的流行XAML控件库,同时提供了一系列常用的.NET帮助类-CookPopularUI。它可以简化开发流程,让我们能够更加专注于核心业务逻辑的实现。让我们一起学习如何使用CookPopularUI,并详细了解其提供的丰富控件内容。项目介绍CookPopularUI不仅提供......