Java17(LTS Long Term Support)特性

news2024/9/22 5:36:11

支持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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用ArcGIS实现生态廊道模拟

生态廊道是指一种连接不同生态系统的走廊或通道&#xff0c;其建立有助于解决人类活动对野生动植物栖息地破碎化和隔离化的问题&#xff0c;提高生物多样性&#xff0c;减轻生态系统的压力。在城市化和农业开发不断扩张的背景下&#xff0c;生态廊道对于野生动植物的生存和繁衍…

了解 Navicat 的连接配置文件

Navicat 16 拥有了许多改进和新功能&#xff0c;以满足数据库开发人员和管理员的需求。凭借 100 多种增强功能和一个全新的界面&#xff0c;有比以往更多的方法去构建、管理和维护数据库。众多改进中&#xff0c;旨在最大限度地提高生产率的一个改进是配置多个连接配置文件的能…

unity3d 旋转cube时变形

将cube移到父路径同级&#xff0c;重置再&#xff0c;更改角度&#xff0c;或者将父路径先重置&#xff0c;再将cube移动到父节点下面

2020年6月9日 Go生态洞察:VS Code Go扩展加入Go项目

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

反射、枚举以及lambda表达式

1. 反射 1.1 定义 java的.class文件在运行时会被编译为一个Class对象&#xff0c;既然是对象&#xff0c;那么我们就可以通过一定的方式取到这个对象&#xff0c;然后对于这个对象进行一系列操作&#xff08;改变原本类的属性、方法&#xff09;。 这个操作就是反射&#xf…

基于模块暴露和Hilt的Android模块化方案

ModuleExpose 项目地址&#xff1a;https://github.com/JailedBird/ModuleExpose 序言 Android模块化必须要解决的问题是 如何实现模块间通信 &#xff1f;而模块之间通信往往需要获取相同的实体类和接口&#xff0c;造成部分涉及模块通信的接口和实体类被迫下沉到基础模块&…

使用 Mybatis 的 TypeHandler 存取 Postgresql jsonb 类型

文章目录 使用 TypeHandler 存取 Postgresql jsonb 类型常见错误column "" is of type jsonb but expression is of type character varying 使用 TypeHandler 存取 Postgresql jsonb 类型 首先在数据库表中定义 jsonb 类型&#xff1a; create table tb_user_info…

Unity中Shader的BRDF解析(四)

文章目录 前言一、BRDF 中的 IBL二、解析一下其中的参数1、光照衰减系数 &#xff1a;surfaceReduction2、GI镜面反射在不同角度下的强弱 &#xff1a;gi.specular * FresnelLerp (specColor, grazingTerm, nv);在BRDF中&#xff0c;IBL&#xff08;Image Based Light&#xff…

Shell编程基础 – for循环

Shell编程基础 – for循环 Shell Scripting Essentials - for Loop 大多数编程语言都有循环的概念和语句。如果想重复一个任务数十次&#xff0c;无论是输入数十次&#xff0c;还是输出数十次&#xff0c;对用户来说都不现实。 因此&#xff0c;我们考虑如何用好Bash Shell编…

一个人撸码!之vue3+vite+element-plus后台管理(标签页组件)

一个后台管理常常需要一个标签页来管理已经打开的页面&#xff0c;这里我们单独写一个组件来展示标签页数组。 该标签页组件只做展示不涉及操作数据。标签页数组可记录已打开的数组&#xff0c;还能定义什么页面需要缓存&#xff0c;是一个重要的功能呢。 首先&#xff0c;建立…

【华为OD题库-043】二维伞的雨滴效应-java

题目 普通的伞在二维平面世界中&#xff0c;左右两侧均有一条边&#xff0c;而两侧伞边最下面各有一个伞坠子&#xff0c;雨滴落到伞面&#xff0c;逐步流到伞坠处&#xff0c;会将伞坠的信息携带并落到地面&#xff0c;随着日积月累&#xff0c;地面会呈现伞坠的信息。 1、为了…

FlowJo 10 v10.4(流式细胞分析软件)

FlowJo是一款广泛应用的流式细胞数据分析软件&#xff0c;它功能强大&#xff0c;简单易用&#xff0c;是流式领域最受推荐的一款专业分析软件&#xff0c;也是各高影响力科学期刊使用最多的软件&#xff0c;已经成了行业的一个标准。 FlowJo具有全面专业的分析功能&#xff0…

解析直播第三方美颜SDK:技术原理与应用

时下&#xff0c;直播平台和主播们纷纷引入美颜技术&#xff0c;以提升视觉效果和用户体验。而在众多美颜技术中&#xff0c;直播第三方美颜SDK成为许多开发者和平台的首选&#xff0c;因其灵活性和高效性而备受推崇。 一、技术原理&#xff1a;美颜算法的精髓 第三方美颜SDK…

Keil5 debug

目录 debug调试功能 基本功能&#xff1a; 程序复位&#xff1a;Reset 运行&#xff1a;Run 停止&#xff1a;Stop 断点调试&#xff08;Breakpoint Debugging&#xff09; 单步调试&#xff1a; 单步调试:Step 单步跳过调试&#xff1a;Step Over&#xff1a; 单步返…

不同路径 II(力扣LeetCode)动态规划

不同路径 II 题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。…

Centos7安装配置nginx

快捷查看指令 ctrlf 进行搜索会直接定位到需要的知识点和命令讲解&#xff08;如有不正确的地方欢迎各位小伙伴在评论区提意见&#xff0c;小编会及时修改&#xff09; Centos7安装配置nginx Nginx介绍 Nginx (engine x) 是一个高性能的 HTTP 和 反向代理 服务&#xff0c;也…

运营商网络性能测试-Y.1564

前言 在网络部署之后和业务开展之前&#xff0c;运营商迫切希望了解当前网络的性能状态&#xff0c;以便为商业规划和业务推广提供必要的基础数据支持。因此&#xff0c;高可靠性和高精确度的性能测试方法对于运营商评判网络性能的优劣&#xff0c;显得尤为重要&#xff0c;而…

InnoSetupCompiler打包程序

修改默认的安装路径 因为程序可能需要在安装路径中写日志&#xff0c;默认的安装路径C:\Program Files (x86)&#xff0c;这个路径好像是受保护还是啥&#xff0c;如果使用默认的打开会报错。 修改方法&#xff1a; DefaultDirName{autopf}\{#MyAppName} {autopf}改成…

【安卓】安卓xTS之Media模块 学习笔记(1) xTS介绍

1.背景 Media的安卓xTS相关测试和功能修复已经进行了一段时间了。 在此整理总结下xTS工作总结&#xff0c;留待后续查阅整理。 2. xTS介绍 - 什么是xTS 谷歌的xTS是对谷歌发布的CTS/GTS/VTS/STS/BTS/CTS-on-GSI等一系列测试的统称。 因为安卓系统比较庞大&#xff0c;模块多…