Java17(LTS Long Term Support)特性

支持JDK17的主流技术框架

  1. spring framework 6.x
  2. springboot 3.x
  3. kafka 3.0(不在支持jdk8)
  4. jenkins 2.357(必须jdk11起步)
  5. James Gosling表示赶紧弃用Java8,使用性能最好的JDK17
  6. Chart GPT也推荐JDK17,从长期到性能来说。

JDK17的特性

swich语句增强

 //jdk12推出的
        var name = "shb";
        String alis = switch (name) {
            case "周瑜" -> "公瑾";
            case "徐庶" -> "元直";
            case "诸葛亮" -> "卧龙";
            case "庞统" -> "凤雏";
            case "shb" -> "大佬";
            default -> "未知";
        };
        System.out.printf("alis" + alis);

        //jdk17增强的  "诸葛亮","徐庶","庞统" 多个前提条件
        String coutry = switch (name) {
            case "周瑜" -> "东吴";
            case "诸葛亮", "徐庶", "庞统" -> "蜀汉";
            case "shb" -> "中华人民共和国";
            default -> "未知";
        };
        System.out.printf("coutry" + coutry);
        //方法执行{},返回结果 yield关键字
        String method = switch (name) {
            case "周瑜" -> {
                Thread.sleep(1000);
                yield "东吴";
            }
            case "诸葛亮", "徐庶", "庞统" -> {
                System.out.println(666);
                yield "蜀汉";
            }
            case "shb" -> {
                System.out.println("民族伟大复兴");
                yield "中华人民共和国";
            }
            default -> "未知";
        };

jdk17及以后版本的多行字符串处理方式 SQL、JSON、HTML

    	//jdk17及以后版本的多行字符串处理方式 SQL、JSON、HTML
        // \ :置于行尾,用来将两行连接为一行
        // \s:单个空白字符
        String html = """
                <html>\
                    <body>
                        <h1>hello,world %s</h1>
                    </body>
                </html>\s
                """;
        System.out.println(html);
        System.out.println(String.format(html,"shb"));

jdk17对 instanceof 增强

   //jdk17对 instanceof 增强
        //jdk14已经增强
        Object o = "1";
        if (o instanceof Integer i) {
            System.out.println(i.intValue());
        } else if (o instanceof String s) {
            System.out.println(s.charAt(0));
        }

密封类(Sealed Classes)

密封类的实现特征有哪些?

1. 密封类(Sealed Classes)一般修饰父类、接口

2. permits许可指定类来继承Dog,Cat,子类必须指定:

final表示无法在继承

non-sealed 可以被子类在继承)

3. 密封类和子类必须在同一个包package底下,否则报错

4. 密封类子类必须直接继承密封类才生效,中间不能间隔其他类例如:Dog extends Animal Animal是密封类

密封类有什么好处?

1.密封类限制继承,更加的安全

2.更加可控,减少代码复杂性 更易于理解

package com.map.helper.facade.om.controller;

/**
 * @author songhaibo
 * @description
 * 密封类的实现特征有哪些?
 * 1. 密封类(Sealed Classes)一般修饰父类、接口
 * 2. permits许可指定类来继承Dog,Cat,子类必须指定:
 *                              final表示无法在继承
 *                              non-sealed 可以被子类在继承)
 * 3. 密封类和子类必须在同一个包package底下,否则报错
 * 4. 密封类子类必须直接继承密封类才生效,中间不能间隔其他类例如:Dog extends Animal Animal是密封类
 * 密封类有什么好处?
 *     答:1.密封类限制继承,更加的安全
 *        2.更加可控,减少代码复杂性 更易于理解
 *
 *
 * @date 2023-11-28 19:35
 */
public abstract sealed class  Animal permits Dog,Cat {
}



package com.map.helper.facade.om.controller;

/**
 * @author songhaibo
 * @description
 * final表示无法在继承
 * non-sealed 可以被子类在继承
 * @date 2023-11-28 19:39
 */
public final class Cat extends Animal {
}

package com.map.helper.facade.om.controller;

/**
 * @author songhaibo
 * @description
 * final表示无法在继承
 * non-sealed 可以被子类在继承
 * @date 2023-11-28 19:39
 */
public non-sealed class Dog extends Animal {
}

Record类,类似lombok的属性只读对象

  1. 通过class文件能看到,它会默认生成有参构造,和获取单个属性的方法。但是没有设置属性的方法
  2. Record.equals()属性值相等就是相等的。因为Record重写equals了
  3. 使用场景:简单的javaBean,比如说坐标类,只有经纬度
/**
 * @author songhaibo
 * @description
 *
 * 通过class文件能看到,它会默认生成有参构造,和获取单个属性的方法。但是没有设置属性的方法
 * 使用场景:简单的javaBean,比如说坐标类,只有经纬度
 * @date 2023-11-28 19:54
 */
public record UserRecord(Long userId,
                         String userName) {
}

  public static void main(String[] args) {
        UserRecord userRecord = new UserRecord(1L, "shb");
        UserRecord userRecord1 = new UserRecord(1L, "shb");
        System.out.println(userRecord.userName());
        // true  Record.equals()属性值相等就是相等的。因为Record重写equals了。
        System.out.println(userRecord.equals(userRecord1));
        //false
        System.out.println(userRecord==userRecord1);
    }

优化空指针异常信息(妈妈再也不担心我找不到空指针异常是哪句代码了)

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "a" is null
at com.map.helper.facade.om.controller.RecordDemo.main(RecordDemo.java:12)

ZGC垃圾收集器(垃圾回收不卡顿,Java开发不用愁)

最大卡顿10毫秒以内,堆内存可以设置很大。具体单独出文章

国外大佬对比过这三种垃圾回收器,通过对比可以看出ZGC的吞吐量是最高的。当然不管是哪种垃圾回收器,JDK17的性能都是最高的。

因为ZGC设置的堆内存空间比较大,在这里G1延迟效率是最好的

综合对比能看出JDK17有很大的性能提升,如果考虑高性能的话毫不犹豫选择JDK17以及ZGC垃圾回收器!。

添加以下JVM选项即可开启ZGC:(目前11和17默认还是G1,需要手动指定)

-XX:+UseZGC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/196901.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JRT对历史表和$get实现

由于Cache没有什么表数据大了查询和插入性能下降的问题&#xff0c;而关系库在数据量上千万后会性能下降&#xff0c;之前关注点都是Java业务脚本化和开发部署简单&#xff0c;还没管关系库单表大问题和级联查询复杂后慢的问题&#xff0c;现在开始解决这俩问题&#xff0c;这是…

socket 一个完整的不错的示例

从客户端向服务器端发送信息时&#xff0c;在服务器端有打印显示&#xff1b; 检测环境常用&#xff0c;备份一下 0&#xff0c;公共头文件代码 //config.h#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #inc…

人工智能的影响与挑战

人工智能是指通过模拟人类智能的各种特性和功能的技术和系统。对于普通大众来说&#xff0c;人工智能的爆发效应还是来源于chatGPT的爆火&#xff0c;大家第一次有了强烈的惊叹和危机。实际上&#xff0c;人工智能已经发展多年&#xff0c;像GPT的发展可以追溯到2018年&#xf…

深度学习笔记《一》:keras_core.layers.Conv2D()

一、说明 卷积&#xff0c;池化&#xff0c;激活函数&#xff0c;这三者号称是深度神经网络的三驾马车&#xff1b;其中卷积是最复杂的一个&#xff0c;因此&#xff0c;对卷积这个东西需要精心认知&#xff0c;这样对后面学习大有帮助。本篇为系列博文&#xff0c;专门介绍Cer…

亮相史上规模最大高交会,Coremail展现邮件技术创新实力

11月19日&#xff0c;第二十五届中国国际高新技术成果交易会在深圳落下帷幕&#xff0c;作为国内邮件行业引领者&#xff0c;Coremail受邀参展。 展览现场&#xff0c;Coremail邮件解决方案及系列产品受到了众多参观者与业内人士的关注与好评。Coremail XT6邮件系统技术成熟&a…

Arcgis根据样本点的shp文件创建一定范围的圆

导入样本点和数据 在ArcToolbox中&#xff0c;找到 "Analysis Tools" -> "Proximity" -> "Buffer" 工具。&#xff08;"分析工具" -> "邻近性" -> "缓冲区" &#xff09; 导入样本点shp文件&#xff…

智能优化算法应用:基于教与学算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于教与学算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于教与学算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.教与学算法4.实验参数设定5.算法结果6.参考文献7.…

8 款强大工具适合 Python 入门的你

Python是一种开源的编程语言&#xff0c;可用于Web编程、数据科学、人工智能以及许多科学应用。学习Python可以让程序员专注于解决问题&#xff0c;而不是语法。由于Python相对较小&#xff0c;且拥有各式各样的工具&#xff0c;因此比Java和C等语言更具优势&#xff0c;同时丰…

技术必备:接口自动化测试数据校验神器【JSonPath】

我们今天不讲如何开发一款自定义开发校验规则库&#xff0c;而是给大家分享一款在开发自定义校验规则库或者常规的接口自动化测试时&#xff0c;经常会用到的一款数据提取神器&#xff1a;JSonPath。 1. JSonPath介绍 JSonPath是一种简单的方法来提取给定JSON文档的部分内容。…

全网最全卡方检验汇总

一文整理了卡方检验全部内容&#xff0c;包括卡方检验的定义&#xff08;基本思想、卡方值计算、适用条件分析&#xff09;、卡方检验分类&#xff08;2*2四格表卡方、R*C表格卡方、配对卡方、卡方拟合优度检验、分层卡方&#xff09;、卡方检验如何分析&#xff08;数据格式、…

银行合规知识竞赛要怎么策划才高大上

合规是银行业务永恒的主题&#xff0c;也是银行发展的根本保障。加强合规知识的学习和理解是保障银行业务健康发展的基础。通过竞赛形式的开展&#xff0c;旨在增强员工对风险和合规的敏感度和关注度&#xff0c;推动全行合规水平全面提升。那么如何策划一场高水平的银行合规知…

尤鲁都斯巴格镇社工站开展“我的牙齿我爱护”儿童公益活动

为了提高儿童的口腔健康意识&#xff0c;尤鲁都斯巴格镇社工站于2023年11月20日在尤鲁都斯巴格镇第一小学开展了一场《我的牙齿我爱护》儿童公益活动。本次活动主要针对小学阶段的儿童&#xff0c;旨在通过口腔健康宣讲等形式&#xff0c;普及口腔保健知识&#xff0c;引导孩子…

鸿蒙原生应用/元服务开发-AGC分发如何生成密钥和和证书请求文件

HarmonyOS通过数字证书&#xff08;.cer文件&#xff09;和Profile文件&#xff08;.p7b文件&#xff09;等签名信息来保证应用的完整性&#xff0c;应用如需上架到华为应用市场必须通过签名校验。因此&#xff0c;开发者需要使用发布证书和Profile文件对应用进行签名后才能发布…

C语言:编程实现1!+2!+3!+4!+……+n!

分析&#xff1a; #include<stdio.h>//这是一个预处理指令&#xff0c;将stdio.h头文件包含到程序中&#xff0c;以便使用输入输出函数。 int main()//这是程序的主函数&#xff0c;是程序执行的入口点。 int i, a 1, t 0, n;//定义了整型变量i、a、t和n。其中&#x…

C/C++ 发送与接收HTTP/S请求

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于传输超文本的协议。它是一种无状态的、应用层的协议&#xff0c;用于在计算机之间传输超文本文档&#xff0c;通常在 Web 浏览器和 Web 服务器之间进行数据通信。HTTP 是由互联网工程任务组&#xff08;IETF…

邮件群发:避免垃圾邮箱,提升营销效果

群发邮件为什么会进入垃圾邮箱呢&#xff1f;常见的原因有&#xff1a;邮件内容出现问题、域名和IP的信誉度不高、退订数或投诉过多等原因。所以&#xff0c;营销人员在做EDM的时候&#xff0c;应该把握方式技巧&#xff0c;才能获取良好的营销效果&#xff0c;避免邮件成为垃圾…

工具 | docker删除不使用的容器

工具 | docker删除不使用的容器 Docker 清理命令

java.sql.SQLException: No suitable driver 问题解决

问题出现 自己在写一个连接C3P0数据库连接池库的测试类&#xff0c;运行该类后出现了下图这个问题 这是我写的测试类 package demo;import com.mchange.v2.c3p0.ComboPooledDataSource;import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLExcept…

【密码学引论】密码学的基本概念

第二章 密码学的基本概念 1、密码学定义 密码编制学和密码分析学共同组成密码学 密码编制学&#xff1a;研究密码编制密码分析学&#xff1a;研究密码破译 2、密码体制的五个组成部分 明文空间M&#xff0c;全体明文的集合密文空间C&#xff0c;全体密文的集合密钥空间K&am…

【Linux系统编程】进程概念详解(什么是进程?如何查看进程?)

目录 一、前言 二、 什么是进程&#xff1f; &#x1f4a6;引出进程 &#x1f4a6;进程的基本概念 &#x1f4a6;理解进程 ⭐描述进程--PCB&#xff08;进程控制块&#xff09; ⭐组织进程 三、查看进程 &#x1f4a6; 通过 ps 命令查看进程 &#x1f4a6; 通过 l…