首页 > 其他分享 >JDK 21 使用一年的总结与感悟,全部分享!

JDK 21 使用一年的总结与感悟,全部分享!

时间:2025-01-11 11:33:04浏览次数:3  
标签:感悟 21 JDK lines 字符串 var String

前言

JDK 21 自发布以来,正好有契机,新项目使用了这一长期稳定的版本。经过一年的开发工作,现在我将从实际开发中的编码体验实际的提升两个角度,分享使用感受。

对比条件说明:
本文将重点对比 JDK 8JDK 21,因为有对比才能有更直观的感受。


1. 实际开发中的编码体验

1.1. 新的语法变化和增强点

接口的私有方法

接口允许定义私有方法,方便代码复用且保持接口设计清晰。

interface MyInterface {
    private void myPrivateMethod() {
        // 私有方法
    }
}
局部变量类型推断(var

减少手动声明变量类型的繁琐性,并支持在 Lambda 表达式中使用 var

var list = new ArrayList<String>();

BiConsumer<String, String> consumer = (var a, var b) -> {
    System.out.println("a: " + a + ", b: " + b);
};
字符串处理的新方法
  • isBlank():检查字符串是否为空或仅包含空格。
  • lines():将多行字符串转换为流。
  • repeat():将字符串重复指定次数。
String multiline = "Line 1\nLine 2\nLine 3";
var lines = multiline.lines().collect(Collectors.toList());
System.out.println(lines); // 输出:[Line 1, Line 2, Line 3]
Switch 表达式增强

支持返回值,且可以使用更简洁的 Lambda 风格语法。

String message = switch (day) {
    case "MONDAY" -> "Start of the week";
    case "FRIDAY" -> "End of the work week";
    default -> "Midweek";
};
多行字符串(Text Block)

使用 """ 定义多行字符串,自动处理换行,减少手动拼接字符串的复杂性。

String textBlock = """
    Hello, this is a text block!
    You can write across multiple lines.
""";
模式匹配(Pattern Matching)

语法增强,直接在条件语句中绑定变量并进行类型转换。

if (obj instanceof String str) {
    System.out.println("String: " + str.length());
}
Sealed 类

通过限制子类的类型范围,增强类层次结构的封装性和安全性。

sealed class Animal permits Dog, Cat {}
final class Dog extends Animal {}
final class Cat extends Animal {}
Record 类

用于表示不可变数据对象,自动生成常见方法(如构造器、equals()hashCode()toString() 等)。

public record Point(int x, int y) {}
字符串模板(String Template)

提供更简单的字符串插值方式,减少拼接字符串的繁琐性。

String name = "张三";
int age = 30;
String message = STR."Hello, \{name}! You are \{age} years old.";
一些其它的变化…
  • 增强的异常处理: 对特定异常的捕获和处理可能更加灵活。
  • 泛型的改进: 某些场景下的泛型推导可能更智能。
  • 更多 API 改进: 某些核心库方法在性能或功能上可能得到优化。
  • 虚拟线程: 解决传统线程的性能和资源消耗问题。

1.2. 其他使用感受

内存占用变小

分别使用的JDK 8springboot 2.0对比JDK 21springboot 3.0内存占用情况如下:

对比可以看出JDK 21JDK 8更加节省内存,理论上来说,项目越“臃肿”时差距越明显,可以看出新版本优化还是用心了的

标签:感悟,21,JDK,lines,字符串,var,String
From: https://blog.csdn.net/weixin_46029085/article/details/144994905

相关文章

  • 洛谷P2181 对角线
    对于一个 ......
  • 浙江工商大学 计算机网络期末选择题出题范围161—215题
    161.ARP协议中,ARP响应是发送( )。A.单播B.组播C.广播D.点播162.关于路由器的说法,正确的是( )A.路由器处理的信息量比交换机少,因而转发速度比交换机快B.对于同一目标,路由器只提供延迟最小的最佳路由C.通常的路由器可以支持多种网络层协议,并提供不同协议之间的分......
  • P7213 [JOISC2020] 最古の遺跡 3
    考虑另一种刻画过程的方式:设\(a_i\)为原序列,\(b_i\)为最终序列,则有:从后往前扫描,\(b_i\)会持续降低到\([i+1,n]\)中未出现\(b_i\)。考虑dp,设\(f(i,j)\)表示考虑了\([i,n]\),当前在\(b\)中\(1\simj\)都出现过的方案数。这里要区分相等的两个数,且只填了\([1,......
  • 力扣21、合并两个有序链表
    目录1、题目2、思路3、代码若有错误,欢迎指正! 1、题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例......
  • 12月21日总结
    概念上,树是一种非线性的数据结构,它由节点(node)组成,有一个特殊的节点被称为根节点(root),从根节点开始,通过分支连接子节点,子节点又可以有自己的子节点,如此层层嵌套,形成类似现实世界中树的形状,只不过是倒置的,根节点在最上方。树具有层级性,根节点为第0层,往下依次递增。节点的度(degree)指......
  • 12月21日
    今天主要学习了Java中的反射(Reflection)机制,这是Java语言提供的强大功能,允许程序在运行时动态地获取类的信息、创建对象、调用方法和访问字段等。反射机制为Java程序提供了极大的灵活性和动态性,是实现框架和库等高级功能的基础。反射是指在程序运行时,能够获取任意一个类的属性和方......
  • 上市公司资产收益率资产回报率ROA净资产收益率ROE数据2000-2021年-社科数据
    上市公司资产收益率资产回报率ROA净资产收益率ROE数据2000-2021年-社科数据https://download.csdn.net/download/paofuluolijiang/90028563https://download.csdn.net/download/paofuluolijiang/90028563在分析上市公司的财务表现时,资产回报率(ROA)和净资产收益率(ROE)是两个核心......
  • CH5XX 软件模拟iic驱动SHT21
    本文使用CH592X软件模拟iic驱动SHT21,1.i2c.c#include"i2c.h"#include"CH59x_common.h"#defineIIC_SCL_PINGPIO_Pin_15//PB15-SCL#defineIIC_SDA_PINGPIO_Pin_14//PB14-SDA#defineIIC_SCL_H()R32_PB_DIR&=~IIC_SCL_PIN#defineIIC_SC......
  • ThreeJS入门(217):THREE.DRACOExporter 知识详解,示例代码
    作者:还是大剑师兰特,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,webgl,ThreeJS,canvas,echarts等技术开发,欢迎加微信(gis-dajianshi),一起交流。查看本专栏目录-本文是第217篇入门文章......
  • (即插即用模块-Attention部分) 三十三、(2021) SPA 显著位置注意力
    文章目录1、SalientPositionsAttention2、代码实现paper:SalientPositionsbasedAttentionNetworkforImageClassificationCode:https://github.com/likyoo/SPANet1、SalientPositionsAttention在现有的自注意力机制中,其建模长距离依赖关系方面表现出色......