动力节点springboot3第一章
1.JDK关注的新特性
1.1 搭建学习环境
JDK:JDK19OpenJDK: jdk.java/19/Liberica JDK: bell-sw/pages/downloads/  , 是一个OpenJDK发行版,为云原生,容器特别优化。
Maven:构建和依赖管理,版本选择3.6以上配置本地仓库和阿里云镜像
IDEA2022.3.1Ultimate:主要的开发工具,我是30天试用版本
数据库:MySQL 5以上版本
火狐浏览器:版本用比较新的,中文版本。
文本工具:EditPlus, Sublime任意。
1.2 有用的新特性
JDK8-19新增了不少新特性,这里我们把实际常用的新特性,给大家介绍一下。包括以下几个方面:
1.Java Record
2.Swich开关表达式
3.Text Block文本块
4.var 声明局部变量
5.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 Recordpublic 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",20);   
System.out.println("lisi = " + String());
Student zhangsan = new Student(1002, "zhangsan","lisi@qq",20);   
System.out.println("zhangsan = " + String());   
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, age=20]zhangsan = Student[id=1002, name=zhangsan, email=lisi@qq, age=20]lisi.equals(zhangsan) = falselisi.name() = lisizhangsan.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",20);
String nameAndAge = at();
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){
equals()方法return Optional.ofNullable(email).orElse("no email").toUpperCase();
}
}
step2:测试静态方法
public static void main(String[] args) {
    String emailUpperCase = ailUpperCase("lisi@163");   
    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;
ail = email;
this.age = age;
}
}
public Student(Integer id, String name) {
this(id, name, (String)null, (Integer)null);
}
}
1.2.1.5 Record与Lombok
Java Record是创建不可变类且减少样板代码的好方法。Lombok是一种减少样板代码的工具。两者有表面上的重叠部分。可能有人会说Java Record会代替Lombok. 两者是有不同用途的工具。Lombok提供语法的便利性,通常预装一些代码模板,根据您加入到类中的注解自动执行代码模板。这样的库纯粹是为了方便实现POJO类。通过预编译代码。将代码的模
板加入到class中。Java Record是语言级别的,一种语义特性,为了建模而用,数据聚合。简单说就是提供了通用的数据类,充当“数据载体",用于在类和应用程序之间进行数据传输。
1.2.1.6 Record实现接口
Java Record可以与普通类一样实现接口,重写接口的方法。
step1: 创建新的接口,定义一个规范方法。
public interface PrintInterface {
/** 输出自定义描述信息 */
void print();
}
step2: 创建新的Record实现接口,重写接口的方法,实现当前Record有关的业务逻辑

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。