动力节点王鹤SpringBoot学习笔记——JDK新特性

本文介绍了JDK19中的新特性,包括Java Record、Switch表达式、Text Block、var声明以及sealed类。通过实例展示了如何使用Record创建不可变类,Switch表达式的新语法,Text Block的便利性,var声明局部变量的灵活性,以及sealed类的限制继承概念。
摘要由CSDN通过智能技术生成

目录

一、JDK关注的新特性

1.1搭建学习环境

1.2有用的新特性

1.2.1 Java Record

1.2.1.1 看看Record怎么用

1.2.1.2 Instance Methods 

1.2.1.3静态方法 Static Method

1.2.1.5Record与Lombok

1.2.1.6Record实现接口

1.2.1.7Local Record

1.2.1.8嵌套Record

1.2.1.9instanceof 判断Record类型

1.2.2 Switch

1.2.2.3 Java Record

1.2.3 Text Block

1.2.3.1 认识文本块

1.2.3.2 文本块与普通的双引号字符串一样

1.2.3.3 空白

1.2.3.4 文本块的方法

1.2.4 var

1.2.4.1 var 声明局部变量

1.2.4.2 使用时候使用var

1.2.5.1 Sealed Classes

1.2.5.2 Sealed Interface


一、JDK关注的新特性

1.1搭建学习环境

JDK:JDK19

OpenJDK: ​​https://jdk.java.net/19/​​ Liberica JDK: ​​https://bell-sw.com/pages/downloads/​​ , 是一个OpenJDK发行版,为云原生,容器特别优化。

Maven:构建和依赖管理,版本选择3.6以上

配置本地仓库和阿里云镜像

IDEA2022.3.1Ultimate:主要的开发工具,我是30天试用版本

数据库:MySQL 5以上版本

火狐浏览器:版本用比较新的,中文版本。

文本工具:EditPlus, Sublime任意。

1.2有用的新特性

JDK8-19新增了不少新特性,这里我们把实际常用的新特性,给大家介绍一下。 包括以下几个方面:

  • Java Record
  • Swich开关表达式
  • Text Block文本块
  • var 声明局部变量
  • sealed 密封类

1.2.1 Java Record

Java14中预览的新特性叫做Record,在Java中,Record是一种特殊类型的Java类。可用来创建不可变类,语法简短。参考​​JEP 395​​. Jackson 2.12支持Record类。

任何时候创建Java类,都会创建大量的样板代码,我们可能做如下:

  • 每个字段的set,get方法
  • 公共的构造方法
  • 重写hashCode, toString(), equals()方法

Java Record避免上述的样板代码,如下特点:

  • 带有全部参数的构造方法
  • public访问器
  • toString(),hashCode(),equals()
  • 无set,get方法。没有遵循Bean的命名规范
  • final类,不能继承Record,Record为隐士的final类。除此之外与普通类一样
  • 不可变类,通过构造创建Record
  • final属性,不可修改
  • 不能声明实例属性,能声明static成员

IDEA创建新的Maven工程 Lession01-feature

1.2.1.1 看看Record怎么用

IDEA新建Class,选择类Record 

step1: 创建Student Record

public record Student(Integer id,String name,String email,Integer age) { }

step2:创建Record对象

public static void main(String[] args) {
Student lisi = new Student(1001, "​​lisi","lisi@qq.com​​",20); 
System.out.println("lisi = " + lisi.toString());
Student zhangsan = new Student(1002, "​​zhangsan","lisi@qq.com​​",20); 

System.out.println("zhangsan = " + zhangsan.toString()); 

System.out.println("lisi.equals(zhangsan) = " + lisi.equals(zhangsan)); 

System.out.println("​​lisi.name​​() = " + ​​lisi.name​​()); 

System.out.println("​​zhangsan.name​​() = " + ​​zhangsan.name​​());
}

现在能查看控制台输出:

lisi = Student[id=1001, name=lisi, ​​email=lisi@qq.com​​, age=20] zhangsan = Student[id=1002, name=zhangsan, ​​email=lisi@qq.com​​, age=20] lisi.equals(zhangsan) = false ​​lisi.name​​() = lisi ​​zhangsan.name​​() = zhangsan

Record通过构造方法创建了只读的对象,能够读取每个属性,不能设置新的属性值。 Record用于创建不可变的对象,同时减少了样板代码。

Record对每个属性提供了public访问器,​​例如lisi.name​​()

1.2.1.2 Instance Methods 

Record是Java类,和普通Java类一样定义方法。下面定义方法concat,将姓名和年龄一起打印输出。 我们创建普通的方法concat,将name和age连接为一个字符串输出。 

step1:创建实例方法 

public record Student(Integer id,String name,String email,Integer age) {
public String concat(){
return String.format("姓名:%s,年龄是:%d", ​​this.name​​,this.age);
} }

​

step2: 调用实例方法

public static void main(String[] args) {
Student lisi = new Student(1001, "​​lisi","lisi@qq.com​​",20);
String nameAndAge = lisi.concat();
System.out.println( nameAndAge);
}

最后控制台输出: 姓名:lisi,年龄是:20

1.2.1.3静态方法 Static Method

Record类定义静态方法,试用静态方法与普通类一样。

step1: 创建静态方法

public record Student(Integer id,String name,String email,Integer age) {
public String concat(){
return String.format("姓名:%s,年龄是:%d", ​​this.name​​,this.age);
}
/** 静态方法 */
public static String emailUpperCase(String email){
return Optional.ofNullable(email).orElse("no email").toUpperCase();
} }

​

step2:测试静态方法

public static void main(String[] args) {
String emailUpperCase = Student.emailUpperCase("​​lisi@163.com​​"); System.out.println("emailUpperCase = " + emailUpperCase);
}

1.2.1.4 Record的构造方法

我们可以在Record中添加构造方法, 有三种类型的构造方法分别:是紧凑的,规范的和定制构造方法

  • 紧凑型构造方法没有任何参数,甚至没有括号。
  • 规范构造方法是以所有成员作为参数
  • 定制构造方法是自定义参数个数

step1: 紧凑和定制构造方法

public record Student(Integer id,String name,String email,Integer age) { /紧凑构造方法/
public Student {
System.out.println("id"+ id );
if( id < 1 ){
throw new RuntimeException("ok");
}
}
/自定义构造方法/
public Student(Integer id, String name) {
this(id, name, null, null);
} }

step2:编译Student.java -> Student.class

public record Student(Integer id, String name, String email, Integer age) { /** 紧凑构造方法和规范构造方法合并了 */
public Student(Integer id, String name, String email, Integer age) {
System.out.println("id" + id);
if (id < 1) {
throw 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值