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

part3 jdk17新特性详解

  1. switch case 匹配

  2. 多行字符串处理
    在这里插入图片描述

    public class htmlHandler {public static void main(String[] args) {//jdk17处理多行字符方式String html2= """<html>\<body>\s<h1>helloworld</h1></body></html>""";}
    }jdk17提供了两个转义符:\ 置于行尾  转成一行\s 单个空白字符
    1. instance of 增强

      jdk17之前,需要强转

在这里插入图片描述

jdk17之后不需要类型强转

public class InstanceOf {public static void main(String[] args) {Object o=2;if(o instanceof  Integer i){System.out.println(i.intValue());}}
}
  1. 密封类/限制继承类(sealed class) :

    • 限制子类继承,防止子类变父类;
    • sealed修饰在父类或者接口上;
    • 子类必须使用final或non-sealed修饰 ;
    • 密封类的子类或父类必须放在同一个包中

    父接口:

    
    public abstract   sealed class Animal permits Dog, Cat {
    }

    子接口:

    
    non-sealed修饰的子类可以被子类继承package com.newfeature;import com.newfeature.Animal;public  non-sealed  class Dog extends Animal {
    }package com.newfeature.domain;import com.newfeature.Dog;public class HaShiQi extends Dog {
    }final修饰的子类无法被继承package com.newfeature;import com.newfeature.Animal;public final class Cat extends Animal {
    }

密封类的优点:1.更加安全 ,避免不必要的继承; 2.更加可控,可以限制类的包范围

  1. Record类,类似lombok的属性只读对象;提供全参的构造方法,以及只读的get方法,没有set
package com.newfeature;public record RecordUser(Long userId,String userName) {
}package com.newfeature;public class RecordDemo {public static void main(String[] args) {RecordUser recordUser=new RecordUser(1L,"heihe");RecordUser recordUser1=new RecordUser(1L,"heihe");System.out.println("获取属性username:"+recordUser.userName()+","+recordUser.equals(recordUser1));}
}说明:该equal方法是record重新的方法,因此对象比较,内容相同,返回结果为true.

输出:

获取属性username:heihe,true

6.优化空指针异常信息:告诉哪个对象空指针了

创建类Dept,person

package com.newfeature;import com.newfeature.domain.Person;
import lombok.Data;@Data
public class Dept {private Integer DeptNo;private Person person;
}package com.newfeature.domain;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {private String name;private Integer age;private Integer height;
}

创建测试类

package com.newfeature;public class NullPointerDemo {public static void main(String[] args) {Dept dept=new Dept();System.out.println(dept.getPerson().getAge());}
}

输出结果:

"C:\Program Files\Java\jdk-17\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2021.3\lib\idea_rt.jar=54479:C:\Program Files\JetBrains\IntelliJ IDEA 2021.3\bin" -Dfile.encoding=UTF-8 -classpath D:\ideaworkplace\ag\target\classes;C:\Users\Lenovo\.m2\repository\org\projectlombok\lombok\1.18.28\lombok-1.18.28.jar com.newfeature.NullPointerDemo
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "com.newfeature.domain.Person.getAge()" because the return value of "com.newfeature.Dept.getPerson()" is nullat com.newfeature.NullPointerDemo.main(NullPointerDemo.java:8)Process finished with exit code 1
  1. ZGC垃圾收集器:

    • 垃圾回收不卡顿

    • 垃圾回收stop the world小于10毫秒,堆内存可以设置很大,甚至是T级别的,减少gc的次数

​ 优点:ZGC吞吐量高,性能高,低延迟 相对jdk8/11

​ 使用方法: -xx:+useZGC

​ jdk8/11默认是 G1垃圾回收器

8.重写socket底层API

9.jdk飞行记录事件流(JFR Event):记录系统cpu资源等使用情况

10.EdDSA签名算法(爱德华兹曲线数字签名算法):Edwards-Curve Digital Signature Algorithm

相关文章:

  • 数据结构排序算详解(动态图+代码描述)
  • 向设备树中添加pinctrl节点与gpio节点的方法
  • ReactHooks 官网文档翻译
  • React进阶 - 14(说一说”虚拟DOM“中的”Diff算法“)
  • 马尔可夫预测(Python)
  • 【日常聊聊】自然语言处理的发展
  • 央视推荐的护眼灯是哪款?护眼灯品牌推荐
  • LeetCode 每日一题 Day 51 - 53
  • spring(一):基于XML获取Bean对象以及各种依赖注入方式
  • 【iOS ARKit】BlendShapes
  • Golang 通过开源库 go-redis 操作 NoSQL 缓存服务器
  • 256:vue+openlayers利用高德逆地理编码,点击地图,弹出某点坐标和地址信息
  • xcode 设置 ios苹果图标,为Flutter应用程序配置iOS图标
  • 一个处理Range List的面试题解法
  • Python爬虫 - 网易云音乐下载
  • [笔记] php常见简单功能及函数
  • 「面试题」如何实现一个圣杯布局?
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 2019年如何成为全栈工程师?
  • IP路由与转发
  • JavaScript标准库系列——Math对象和Date对象(二)
  • javascript从右向左截取指定位数字符的3种方法
  • JS 面试题总结
  • PHP变量
  • Python_OOP
  • Python爬虫--- 1.3 BS4库的解析器
  • Python实现BT种子转化为磁力链接【实战】
  • Quartz初级教程
  • STAR法则
  • TypeScript实现数据结构(一)栈,队列,链表
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 成为一名优秀的Developer的书单
  • 当SetTimeout遇到了字符串
  • 记录一下第一次使用npm
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 一、python与pycharm的安装
  • ​queue --- 一个同步的队列类​
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #HarmonyOS:基础语法
  • #NOIP 2014# day.2 T2 寻找道路
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $(function(){})与(function($){....})(jQuery)的区别
  • (+4)2.2UML建模图
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (WSI分类)WSI分类文献小综述 2024
  • (差分)胡桃爱原石
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (三)docker:Dockerfile构建容器运行jar包
  • (四)汇编语言——简单程序
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)用.Net的File控件上传文件的解决方案
  • .NET CF命令行调试器MDbg入门(一)