还在使用Java8? 这5个Java17新功能,你会喜欢的
2022/3/18 22:28:02
本文主要是介绍还在使用Java8? 这5个Java17新功能,你会喜欢的,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
SpringBoot3.0最低支持JDK17,各开源软件正在全面拥抱JDK17.
在2022年Java开发人员生产力报告中,有升级计划的调查受访者中,37%的人计划在未来六个月内升级到2021年9月份发布的LTS版本JDK 17。另有25%的人计划在未来6到12个月内升级到JDK 17。
这5个你喜欢的JDK17新功能,会让你升级JDK17吗?
1. record 类 (记录类)
传统的Java应用程序通过创建一个类,通过该类的构造方法实例化类,并通过getter和setter方法访问成员变量或者设置成员变量的值。有了record关键字,你的代码会变得更加简洁。
package cn.dayangshuo; /** * 普通的dto * @author DAYANG */ public class NormalEntity { public static void main(String[] args) { //传统的方式 User1 user1 = new User1("大阳", 1990); System.out.println(user1); //reocrd 记录类 User2 user2 = new User2("大阳", 1990); System.out.println(user2); } } /** * 成员变量都是固定的 */ class User1 { String name; Integer age; public User1(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User1[" + "name='" + name + '\'' + ", age=" + age + ']'; } } package cn.dayangshuo; /** * record 记录类 * 你也可以覆写equals() hashCode() toString()方法 * @author DAYANG */ record User2(String name, Integer age) { @Override public String toString() { return "User2[" + "name='" + name + '\'' + ", age=" + age + ']'; } @Override public boolean equals(Object obj) { return false; } @Override public int hashCode() { return 0; } }
2. 新的字符串方法
从JDK8到JDK17陆续增加了更多字符串方法,操作字符串更简单了。
- isBlank():如果字符串为空或字符串仅包含空格(包括制表符),则返回 true。注意与isEmpty() 不同,isEmpty()仅在长度为 0 时返回 true。
- lines():将字符串拆分为字符串流,每个字符串包含一行。
- strip() : 分别从开头和结尾;
- stripLeading()/stripTrailing()仅开始和仅结束删除空格。
- repeat(int times):返回一个字符串,该字符串采用原始字符串并按指定的次数重复该字符串。
- readString():允许从文件路径直接读取到字符串。
- writeString(Path path):将字符串直接写入指定路径处的文件。
- indent(int level):缩进字符串的指定量。负值只会影响前导空格。
- transform(Function f):将给定的 lambda 应用于字符串。
package cn.dayangshuo; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.stream.Stream; /** * @author DAYANG */ public class NewStringMethod { public static void main(String[] args) throws IOException { //lines()方法示例 String str = "hello \njava17 \n\r!\r"; Stream<String> lines = str.lines(); lines.forEach(System.out::println); //readString()方法示例 Path path = Path.of("C:\\NewStringMethod.java"); String text = Files.readString(path); System.out.println(text); } }
3. 清爽的switch表达式
上代码:
package cn.dayangshuo; /** * @author DAYANG */ public class OldSwitch { public static void main(String[] args) { oldSwitch(); newSwitch(); } private static void oldSwitch() { int size = 3; String cn = ""; switch (size) { case 1: cn = "壹"; break; case 2: cn = "贰"; break; case 3: cn = "叁"; break; default: cn = "未知"; } System.out.println(cn); } //更清爽 private static void newSwitch() { int size = 3; String cn = switch (size) { case 1 -> "壹"; case 2 -> "贰"; case 3 -> "叁"; default -> "未知"; }; System.out.println(cn); } }
4. 文本块
Java处理json或者xml文本时,需要多个繁琐的嵌套转义,代码写着费劲,维护更费劲。从Java13开始引入了文本块(Text blocks),上代码:
package cn.dayangshuo; /** * @author DAYANG */ public class TextBlocks { public static void main(String[] args) { //需要转义 String jsonStr = "{\"name\": \"大阳\"}"; //文本块,不需要转义字符 String textBlocks = """ {"name": "大阳"} """; System.out.println(jsonStr); System.out.println(textBlocks); } }
5. 密封类(Sealed classes)
package cn.dayangshuo; /** * 定义一个抽象密封类Pet,它的实现类只能是Dog, Cat这两个,其他的实现类均不允许 * @author DAYANG */ public abstract sealed class Pet permits Dog, Cat {} final class Dog extends Pet { } final class Cat extends Pet { }
这篇关于还在使用Java8? 这5个Java17新功能,你会喜欢的的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南