# java15新特性
# 文本块
在 Java 15 之前,处理多行文本需要手动拼接字符串、添加换行符 \n 和转义符 \,代码冗长且可读性极低
public class OldStringDemo {
public static void main(String[] args) {
// 传统方式写多行JSON
String json = "{\n" +
" \"name\": \"张三\",\n" +
" \"age\": 25,\n" +
" \"address\": \"北京市朝阳区\"\n" +
"}";
// 传统方式写SQL
String sql = "SELECT id, name, age \n" +
"FROM user \n" +
"WHERE age > 18 \n" +
"AND address LIKE '%北京%'";
System.out.println(json);
System.out.println(sql);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
新写法:文本块使用 三个双引号 """ 包裹多行文本,无需手动转义换行、双引号,格式与实际输出完全一致
public class TextBlockDemo {
public static void main(String[] args) {
// 文本块写JSON(无需转义、无需拼接)
String json = """
{
"name": "张三",
"age": 25,
"address": "北京市朝阳区"
}""";
// 文本块写SQL(格式与执行的SQL完全一致)
String sql = """
SELECT id, name, age
FROM user
WHERE age > 18
AND address LIKE '%北京%'
""";
// 文本块写HTML
String html = """
<html>
<body>
<h1>Hello, 文本块</h1>
</body>
</html>""";
System.out.println(json);
System.out.println(sql);
System.out.println(html);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 【了解】Hidden 隐藏类
Java 15 引入了 Hidden 隐藏类特性,这是一个专为框架和运行时环境设计的底层机制,主要是为了优化 动态生成短期类(比如 Lambda 表达式、动态代理)的性能问题,普通开发者无需关心。 在 Lambda 表达式、AOP 动态代理、ORM 映射等场景中,框架会动态生成代码载体(比如方法句柄、临时代理类),这些载体需要关联类的元数据才能运行。如果生成频繁,传统类的元数据会被类加载器追踪,需要等待类加载器卸载才能回收,导致元空间堆积和 GC 压力。 Hidden 类的特点是对其定义类加载器之外的所有代码都不可见,由于不可发现且链接微弱,JVM 垃圾回收器能够更高效地卸载隐藏类及其元数据,从而防止短期类堆积对元空间造成压力,优化了需要动态生成大量类的性能。