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

本文介绍了在SpringBoot开发中JDK19的一些重要新特性,如Java Record、Switch表达式、Text Block、var声明以及sealed类。通过实例详细解释了这些特性的使用方法和优势,帮助开发者更好地理解和应用这些新特性。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、JDK关注的新特性

1.1 搭建学习环境

1.2 有用的新特性

1.2.1 Java Record

1.2.1.1 看看Record怎么用 IDEA新建Class,选择类Record 

1.2.1.3 静态方法 Static Method 

1.2.1.4 Record的构造方法

1.2.1.5 Record与Lombok

1.2.1.6 Record实现接口 

1.2.1.7 Local Record 

1.2.1.8 嵌套Record

1.2.1.9 instanceof 判断Record类型 

总结

1.2.2 Switch

1.2.2.1 箭头表达式,新的case标签 

1.2.2.2 yeild返回值

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.3.5 转义字符 

总结:

1.2.4 var

1.2.4.1 var 声明局部变量 

1.2.4.2 使用时候使用var 

1.2.5 Sealed

1.2.5.1 Sealed Classes

1.2.5.2 Sealed Interface


前言

以实际项目需求入手,结合新特性@HttpExchange声明式客户端、RFC7807、ProblemDetail、预编译AOT等,详解了SpringBoot核心知识点,突出Web应用痛点解决方案。采用知识点配合项目案例的方式,让各位小伙伴轻松掌握SpringBoot。

一、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](https://openjdk.java.net/jeps/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新建Class,选择类Record 

IDEA创建新的Maven工程 Lession01-feature 

1.2.1.1 看看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()

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 new RuntimeException("ok");    }
else {      
this.id = id;      
this.name = name;     
  this.email = email;      
this.age = age;    
}  
} 
  public Student(Integer id, String name) {  
    this(id, name, (String)null, (Integer)null);  
}
}

1.2.1.5Record与Lombok</

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值