首页 > 编程语言 >Java17新特性及代码示例:还在使用Java8? 这5个Java17新功能,你会喜欢的

Java17新特性及代码示例:还在使用Java8? 这5个Java17新功能,你会喜欢的

时间:2023-07-04 22:25:40浏览次数:199  
标签:Java17 cn String 示例 age Java8 字符串 public name

SpringBoot3.0最低支持JDK17,各开源软件正在全面拥抱JDK17.

有升级计划的调查受访者中,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 {
}


作者:大阳聊AI
链接:https://www.jianshu.com/p/09dbc2c38d8e
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:Java17,cn,String,示例,age,Java8,字符串,public,name
From: https://www.cnblogs.com/xmsz118/p/17527169.html

相关文章

  • Spring Boot 3.0.0 来啦!最小依赖 Java17!升还是不升?
    Spring官方于2022年1月20日发布SpringBoot3.0.0-M1版本,预示开启了SpringBoot3.0的里程碑。官方公告下的中文评论有点东西。。。熟悉的味道!就是那个味!  分享一篇朋友对SpringBoot3.0的介绍:生还是不生?SpringBoot3版本有起飞前兆,最小依赖Java17!一直......
  • java http大文件断点续传上传示例
    ​ 4GB以上超大文件上传和断点续传服务器的实现随着视频网站和大数据应用的普及,特别是高清视频和4K视频应用的到来,超大文件上传已经成为了日常的基础应用需求。但是在很多情况下,平台运营方并没有大文件上传和断点续传的开发经验,往往在网上找一些简单的PHP或者Java程序来实现基......
  • (转)Rancher 2.6 安装部署及入门示例
    原文:https://blog.csdn.net/weixin_41636021/article/details/1279767120.Rancher2.X简介Rancher是为使用容器的公司打造的容器管理平台。Rancher简化了使用Kubernetes的流程,开发者可以随处运行Kubernetes(RunKubernetesEverywhere),满足IT需求规范,赋能DevOps团队。ra......
  • 【大厂面试必问】Java8 新特性
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家✌......
  • java8 日期、时间处理类
    一、LocalDate类创建LocalDate方法说明staticLocalDatenow()获取默认时区的当前日期,默认返回格式yyyy-MM-ddstaticLocalDatenow(Clockclock)从指定时钟获取当前日期staticLocalDatenow(ZoneIdzone)获取指定时区的当前日期staticLocalDateof(i......
  • Solon Web 开发:三、一个简单的 Web 模板项目(或示例)
    演示web程序的常用能力:控制器、请求参数、参数校验、跳转过滤器、全局异常处理静态文件动态模板动态模板公共变量及控制器基类日志Json渲染格式控制模板下载:打包成jar,可以自启动helloworld_web_jar.zip(maven)helloworld_web_jar_gradle.zip(gradle)打包成w......
  • Application Request Routing 反向代理配置示例
    第一步:安装URLRewrite 第二步:安装ApplicationRequestRouting下载地址:x86installer / x64installer第三步:配置 效果图:  对应配置文件<?xmlversion="1.0"encoding="UTF-8"?><configuration><system.webServer><rewrite>......
  • centos 关于日志文件切割logrotate的使用及示例
    (文章目录)本文简单的介绍了logrotate使用和示例。本文分为2个部分,即logrotate介绍以及以tomcat的日志为示例进行介绍。一、Logrotate介绍Logrotate程序是一个日志文件管理工具。用于分割日志文件,压缩转存、删除旧的日志文件,并创建新的日志文件logrotate一般系统会自带,不需......
  • superset(二)基本使用详细示例以及superset权限控制介绍
    Superset系列文章superset(一)详细部署步骤(python3.7.15、windows11)及验证异常处理superset(二)基本使用详细示例以及superset权限控制介绍(文章目录)本文简单的介绍了superset的基本使用步骤的示例,以及superset的权限控制。本文部分数据来源于互联网。本文分为2个部分,即通......
  • java8发送邮件失败, 修改jdk镜像中的java.security文件
    背景原本部署环境中的java:8镜像在检查问题删除,用dockerpullopenjdk:8重新拉取并改名java:8,在重新部署后,发送邮件报错:javax.net.ssl.SSLHandshakeException:Noappropriateprotocol(protocolisdisabledorciphersuitesareinappropriate)!!!原因根本原因是j......