Java 新特性 - Java 文本块、Record 类、instanceof 模式匹配、Switch 表达式增强
📅 2026/8/4 7:32:29
👁️ 阅读次数
📝 编程学习
一、Java 文本块(Java 15 正式)
1、基本介绍
- 文本块适用于多行字符串
2、演示
Stringjson=""" { "name": "Tom", "age": 27 } """;System.out.println(json);# 输出结果 { "name": "Tom", "age": 27 }二、Record 类(Java 16 正式)
1、基本介绍
- 自动生成构造器、getter 方法、equals 方法、hashCode 方法、toString 方法
2、演示
(1)Record
- Person.java
publicrecordPerson(Stringname,intage,Stringemail){// 添加紧凑构造器做参数校验publicPerson{if(age<0){thrownewIllegalArgumentException("年龄不能为负数");}if(email==null||!email.contains("@")){thrownewIllegalArgumentException("邮箱格式无效");}}publicStringgetGreeting(){return"Hello, "+name;}}(2)Test
Personp=newPerson("李四",25,"lisi@example.com");System.out.println(p);System.out.println(p.name());System.out.println(p.age());System.out.println(p.getGreeting());# 输出结果 Person[name=李四, age=25, email=lisi@example.com] 李四 25 Hello, 李四Personp1=newPerson("李四",25,"lisi@example.com");Personp2=newPerson("李四",25,"lisi@example.com");System.out.println(p1.equals(p2));# 输出结果 truePersonp=newPerson("李四",-25,"lisi@example.com");# 输出结果 Exception in thread "main" java.lang.IllegalArgumentException: 年龄不能为负数Personp=newPerson("李四",25,"lisiexample.com");# 输出结果 Exception in thread "main" java.lang.IllegalArgumentException: 邮箱格式无效三、instanceof 模式匹配(Java 16 正式)
1、基本介绍
- 类型判断后直接赋值,省去强制转换
2、演示
- 旧写法,需要显式强转
Objectobj="Hello Java";if(objinstanceofString){Strings=(String)obj;System.out.println(s.length());}# 输出结果 10- 新模式匹配,同时完成判断和赋值,可以直接使用
Objectobj="Hello Java";if(objinstanceofStrings){System.out.println(s.length());}# 输出结果 10- 还可以配合
&&使用,但不能配合||使用
Objectobj="Hello Java";if(objinstanceofStrings&&s.length()>5){System.out.println("字符串长度大于 5: "+s);}# 输出结果 字符串长度大于 5: Hello Java- 对集合中的元素使用
List<Object>list=List.of("Java",123,"Record");for(Objectitem:list){if(iteminstanceofStringstr){System.out.println("字符串: "+str);}elseif(iteminstanceofIntegernum){System.out.println("数字: "+num);}}# 输出结果 字符串: Java 数字: 123 字符串: Record四、Switch 表达式增强(Java 14 正式)
1、基本介绍
- 作为表达式返回值,配合
->和 yield,代码更简洁
2、演示
- 旧写法
Stringday="MONDAY";intworkHours;switch(day){case"MONDAY":case"TUESDAY":case"WEDNESDAY":case"THURSDAY":case"FRIDAY":workHours=8;break;case"SATURDAY":workHours=5;break;case"SUNDAY":workHours=0;break;default:thrownewIllegalArgumentException("无效的星期:"+day);}System.out.println("工作时长:"+workHours);Stringday="MONDAY";Stringfeeling;switch(day){case"MONDAY":System.out.println("周一综合征");feeling="疲惫";break;case"FRIDAY":System.out.println("终于周五了");feeling="兴奋";break;default:feeling="普通";break;}System.out.println("心情:"+feeling);- 新写法
Stringday="MONDAY";intworkHours=switch(day){case"MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY"->8;case"SATURDAY"->5;case"SUNDAY"->0;default->thrownewIllegalArgumentException("无效的星期:"+day);};System.out.println("工作时长:"+workHours);Stringday="MONDAY";Stringfeeling=switch(day){case"MONDAY"->{System.out.println("周一综合征");yield"疲惫";}case"FRIDAY"->{System.out.println("终于周五了");yield"兴奋";}default->"普通";};System.out.println("心情:"+feeling);
编程学习
技术分享
实战经验