Java 新特性 - Java 文本块、Record 类、instanceof 模式匹配、Switch 表达式增强
一、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、演示1RecordPerson.javapublicrecordPerson(Stringname,intage,Stringemail){// 添加紧凑构造器做参数校验publicPerson{if(age0){thrownewIllegalArgumentException(年龄不能为负数);}if(emailnull||!email.contains()){thrownewIllegalArgumentException(邮箱格式无效);}}publicStringgetGreeting(){returnHello, name;}}2TestPersonpnewPerson(李四,25,lisiexample.com);System.out.println(p);System.out.println(p.name());System.out.println(p.age());System.out.println(p.getGreeting());# 输出结果 Person[name李四, age25, emaillisiexample.com] 李四 25 Hello, 李四Personp1newPerson(李四,25,lisiexample.com);Personp2newPerson(李四,25,lisiexample.com);System.out.println(p1.equals(p2));# 输出结果 truePersonpnewPerson(李四,-25,lisiexample.com);# 输出结果 Exception in thread main java.lang.IllegalArgumentException: 年龄不能为负数PersonpnewPerson(李四,25,lisiexample.com);# 输出结果 Exception in thread main java.lang.IllegalArgumentException: 邮箱格式无效三、instanceof 模式匹配Java 16 正式1、基本介绍类型判断后直接赋值省去强制转换2、演示旧写法需要显式强转ObjectobjHello Java;if(objinstanceofString){Strings(String)obj;System.out.println(s.length());}# 输出结果 10新模式匹配同时完成判断和赋值可以直接使用ObjectobjHello Java;if(objinstanceofStrings){System.out.println(s.length());}# 输出结果 10还可以配合使用但不能配合||使用ObjectobjHello Java;if(objinstanceofStringss.length()5){System.out.println(字符串长度大于 5: s);}# 输出结果 字符串长度大于 5: Hello Java对集合中的元素使用ListObjectlistList.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、演示旧写法StringdayMONDAY;intworkHours;switch(day){caseMONDAY:caseTUESDAY:caseWEDNESDAY:caseTHURSDAY:caseFRIDAY:workHours8;break;caseSATURDAY:workHours5;break;caseSUNDAY:workHours0;break;default:thrownewIllegalArgumentException(无效的星期day);}System.out.println(工作时长workHours);StringdayMONDAY;Stringfeeling;switch(day){caseMONDAY:System.out.println(周一综合征);feeling疲惫;break;caseFRIDAY:System.out.println(终于周五了);feeling兴奋;break;default:feeling普通;break;}System.out.println(心情feeling);新写法StringdayMONDAY;intworkHoursswitch(day){caseMONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY-8;caseSATURDAY-5;caseSUNDAY-0;default-thrownewIllegalArgumentException(无效的星期day);};System.out.println(工作时长workHours);StringdayMONDAY;Stringfeelingswitch(day){caseMONDAY-{System.out.println(周一综合征);yield疲惫;}caseFRIDAY-{System.out.println(终于周五了);yield兴奋;}default-普通;};System.out.println(心情feeling);