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));//falseSystem.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.rhkb.cn/news/204299.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【古月居《ros入门21讲》学习笔记】15_ROS中的坐标系管理系统

目录 说明&#xff1a; 1. 机器人中的坐标变换 tf功能包能干什么&#xff1f; tf坐标变换如何实现 2. 小海龟跟随实验 安装 ros-melodic-turtle-tf 实验命令 运行效果 说明&#xff1a; 1. 本系列学习笔记基于B站&#xff1a;古月居《ROS入门21讲》课程&#xff0c;且使…

数据治理框架和成熟度模型

数据治理成熟度模型 一个企业的数据治理能力越高&#xff0c;所享受到数据治理带来的价值也会越多&#xff0c;如增加收入、减少成本、降低风险等。于是&#xff0c;很多企业想要准确地评估本公司的数据治理能力&#xff0c;可以利用数据治理成熟度模型方法&#xff0c;包括 D…

求和(打表题)

题目 打个表发现当 n 时答案为 p &#xff0c;否则为 1 &#xff0c;然后套板子。 #include <iostream> #include <algorithm> #include <vector> #include <cstring> #include <cmath>using namespace std;#define int long long using i64 …

直线(蓝桥杯)

直线 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 在平面直角坐标系中&#xff0c;两点可以确定一条直线。如果有多点在一条直线上&#xff0c; 那么这些点中任意两点确定的直线是同一条。 给定平面上 2 3 个…

万字解析设计模式之模板方法与解释器模式

一、模板方法模式 1.1概述 定义一个操作中算法的框架&#xff0c;而将一些步骤延迟到子类中&#xff0c;模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 例如&#xff0c;去银行办理业务一般要经过以下4个流程&#xff1a;取号、排队、办理具体业…

戴尔科技推出全新96核Precision 7875塔式工作站

工作站行业一直是快节奏且充满惊喜的。在过去25年中,戴尔Precision一直处于行业前沿,帮助创作者、工程师、建筑师、研究人员等将想法变为现实,并对整个世界产生影响。工作站所发挥的作用至关重要,被视为化不可能为可能的必要工具。如今,人工智能(AI)和生成式AI(GenAI)的浪潮正在…

【JavaEE初阶】认识线程、创建线程

1. 认识线程&#xff08;Thread&#xff09; 1.1 概念 1) 线程是什么 一个线程就是一个 "执行流". 每个线程之间都可以按照顺序执行自己的代码. 多个线程之间 "同时" 执行着多份代码. 举例&#xff1a; 还是回到我们之前的银⾏的例⼦中。之前我们主要描…

业务逻辑漏洞

业务逻辑漏洞 扫描器扫不出来 漏洞包括 暴力破解任意用户/密码登陆短信/邮箱轰炸验证码绕过/爆破/重放/回传用户名/手机号枚举(用户名枚举&#xff1a;当用户登录时&#xff0c;显示用户名不存在&#xff0c;或密码不正确&#xff0c;两个其中一个不正确就称为用户名枚举)越…

Python中的datetime库

1. datetime datetime是Python中用于处理日期和时间的类&#xff0c;它包含在datetime模块中。使用datetime类&#xff0c;我们可以创建表示特定日期和时间的对象&#xff0c;以及进行日期和时间的计算和操作。 from datetime import datetime, timedelta# 获取当前日期和时间…

20 章 多线程

20.1线程简介. 20.2创建线程 2.1继承Thread类 Thread 类是java.lang包中的一个类&#xff0c;从这个类中实例化的对象代表线程&#xff0c;程序员启动一个新线程需要建立Thread 实例。Thread类中常用的两个构造方法如下: public Thread():创建一个新的线程对象。 public Thre…

用C++和python混合编写数据采集程序?

之前看过一篇文章&#xff0c;主要阐述的就是多种语言混合编写爬虫程序&#xff0c;结合各种语言自身优势写一个爬虫代码是否行得通&#xff1f;觉得挺有意思的&#xff0c;带着这样的问题&#xff0c;我尝试着利用我毕生所学写了一段C和python混合爬虫程序&#xff0c;目前运行…

LeetCode Hot100 84.柱状图中最大的矩形

题目&#xff1a; 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 方法&#xff1a; 代码&#xff1a; class Solution {public int largestRectang…

成为AI产品经理——模型评估概述

目录 一、模型宣讲和评估的原因 二、模型宣讲 三、模型评估 1. 重要特征 ① 特征来源 ②特征意义 2.选择测试样本 3.模型性能和稳定性 一、模型宣讲和评估的原因 刘海丰老师提到他们在做一个金融AI产品未注重模型指标&#xff0c;过于注重业务指标&#xff0c;导致产生…

Python小知识

个人学习笔记&#xff0c;用于记录使用过程中好用的技巧、好用的库。 1 小知识 1.1 相对路径 1.2 打包Exe文件 命令&#xff1a; pyinstaller -F main.py其中-F&#xff1a;覆盖之前打包的文件 mian.py&#xff1a;需要打包的Python文件 PS&#xff1a;使用pyinstaller 5.1…

Docker,从入门到精通

1、DockerFile 介绍 dockerfile 是啥?dockerfile 用来构建 docker 镜像的文件。 具体步骤&#xff1a; 1、编写一个 dockerfile 文件 2、docker build 构造一个镜像 3、docker run 运行镜像 4、docker push 发布镜像 DockerFile 构建过程 1、每个保留关键字都必须是大…

人工智能-优化算法之凸集

凸性 凸性&#xff08;convexity&#xff09;在优化算法的设计中起到至关重要的作用&#xff0c; 这主要是由于在这种情况下对算法进行分析和测试要容易。 换言之&#xff0c;如果算法在凸性条件设定下的效果很差&#xff0c; 那通常我们很难在其他条件下看到好的结果。 此外&…

【Vue】绝了!还有不懂生命周期的?

生命周期 Vue.js 组件生命周期&#xff1a; 生命周期函数&#xff08;钩子&#xff09;就是给我们提供了一些特定的时刻&#xff0c;让我们可以在这个周期段内加入自己的代码&#xff0c;做一些需要的事情; 生命周期钩子中的this指向是VM 或 组件实例对象 在JS 中&#xff0c;…

微服务实战系列之Cache

前言 欢迎来到Cache&#xff08;缓存&#xff09;的世界&#xff01; 自从世界第一台计算机诞生之日起&#xff0c;人们对效率的渴望逐步增强。从CPU到存储&#xff0c;从芯片到内存&#xff0c;一批又一批的先驱以一种孜孜不倦的“工匠”精神&#xff0c;为计算机运行效率的提…

华为P40无法链接adb的解决记录

真的很讨厌华为的设备&#xff0c;很多东西啥设备都能跑得好好的&#xff0c;就华为会出问题&#xff0c;简直就是手机界的IE。 情况&#xff1a;突然无法链接adb到P40&#xff0c;拔插无效&#xff0c;关闭开发人员选项再打开也无效&#xff0c;撤销USB调试授权也无效&#x…

西南科技大学电路分析基础实验A1(一阶电路的设计)

目录 一、实验目的 二、实验设备 三、预习内容(如:基本原理、电路图、计算值等) 四、实验数据及结果分析(预习写必要实验步骤和表格) 1. 观测一阶电