Java 13 特性

2025年8月24日 | 阅读 4 分钟

2019 年 9 月 17 日,Java 13 发布并可用于生产环境。由于 6 个月的发布周期,Java 13 中没有太多面向开发者的功能。Z Garbage Collector 的增强、应用程序类数据共享以及 switch 语句和文本块的预览是一些主要功能。

Java 13 的特性

  1. 文本块 - JEP 355
  2. 用于文本块的 String 类中的新方法
  3. Switch 表达式增强 - JEP 354
  4. 重新实现旧版 Socket API - JEP 353
  5. 动态 CDS 存档 - JEP 350
  6. ZGC:取消提交未使用的内存 - JEP 351
  7. newFileSystem() 方法
  8. 支持命名空间的 DOM 和 SAX 工厂

1. 文本块 - JEP 355

这是预览功能的一个示例。它使得构建多行字符串变得容易。多行字符串必须用一对三双引号包围。

使用文本块创建的字符串对象没有其他属性。它是创建多行字符串的一种更方便的方法。我们不能用文本块创建单行字符串。

行终止符必须跟在初始的三双引号后面。

输出

Text Block String:
Hi
Hello
Yes
Normal String Literal:
Hi
Hello
Yes

2. String 类中用于文本块的新方法

String 类现在有三个与文本块功能相关的新方法。

formatted(Object... args) 是一个与 String format() 类似的函数。它用于帮助文本块格式化。

stripIndent() 是一个函数,用于删除文本块中每行开头和结尾的空白字符。文本块使用此机制来保留内容的相对缩进。

translateEscapes() 它返回一个字符串,其中包含此字符串的值,并对转义序列进行翻译,就像它们在字符串字面量中一样。

NewMethodsDemo.java

输出

Name: Peter
Phone: 123456789
Salary: $2000.56

<html>***
	<body>		*
		<p>Hello</p>**	*
	</body>*
</html>
<html>
	<body>
		<p>Hello</p>
	</body>
</html>
Hi	
Hello' " /u0022 Pankaj
Hi	
Hello' " /u0022 Pankaj

3. Switch 表达式增强 - JEP 354

在 Java 12 版本中,switch 表达式被添加为试用功能。唯一的区别是 Java 13 中用 "yield" 替换了 "break" 来从 case 语句返回值。

SwitchExample.java

输出

2
2
x = 2

4. 重新实现旧版 Socket API - JEP 353

Java 13 版本更新了 java.net.Socket 和 java.net.ServerSocket API 的底层实现。NioSocketImpl 是新实现,它是 PlainSocketImpl 的直接替换。

它使用 java.util.concurrent 锁而不是同步方法。如果我们想使用旧实现,可以使用 java 选项 -Djdk.net.usePlainSocketImpl。

5. 动态 CDS 存档 - JEP 350

类数据共享功能是在 Java 10 中引入的,在本 JEP 中得到了扩展。现在创建 CDS 存档并使用它要容易得多。

6. ZGC:取消提交未使用的内存 - JEP 351

本 JEP 改进了 ZGC,允许操作系统回收浪费的堆内存。Java 11 中引入了 Z Garbage Collector。它会稍微等待一段时间才清理堆内存。但是,操作系统没有收到未使用的 RAM。这对内存占用空间小的 IoT 和微芯片设备来说是个问题。现在已经改进,将未使用的内存返回给操作系统。

7. newFileSystem() 方法

FileSystems 类现在有三个额外的方法,可以更轻松地使用文件系统提供程序,这些提供程序将文件的内容作为文件系统来处理。

8. 支持命名空间的 DOM 和 SAX 工厂

已添加用于创建支持命名空间的新 DOM 和 SAX 工厂的新技术。

  1. newDefaultNSInstance()
  2. newNSInstance()
  3. newNSInstance 是一种 newNSInstance (String factoryClassName, ClassLoader classLoader) 的类型

在本文中,我们讨论了 Java 13 版本的一些特性。