Java 18开发者新特性全解析:简单Web服务器、代码片段增强与UTF-8默认编码

本文详细介绍了Java 18为开发者带来的多项重要更新,包括内置简单Web服务器、Javadoc代码片段增强标签@snippet、默认UTF-8字符集支持,以及finalize()方法废弃准备等核心特性,帮助开发者提前掌握新版本技术动向。

Java 18开发者新特性解析

Java的新简单Web服务器

Java 18将在jdk.httpserver模块中提供一个最小功能的Web服务器。它包含访问API以及位于bin目录下的二进制文件,方便从命令行启动服务器。

启动Web服务器的命令可简化为:

1
$ jwebserver -b 0.0.0.0 -p 8000

注意: 更多命令行选项及jdk.httpserver模块详情,请参阅JEP 408文档。

该Web服务器不适用于生产环境,仅支持HTTP/1.1协议且不支持PUT请求,因此无法处理动态内容。推荐用于原型设计、测试和调试。以下为带注释的代码示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import java.net.InetSocketAddress;
import java.nio.file.Path;
import com.sun.net.httpserver.SimpleFileServer;
import static com.sun.net.httpserver.SimpleFileServer.OutputLevel;

public class App {
    public static void main(String[] args) {
        // 创建简单文件服务器,指定套接字地址、路径和输出级别
        var server = SimpleFileServer.createFileServer(
            new InetSocketAddress(8000), 
            Path.of("/home/java"), 
            OutputLevel.VERBOSE
        );

        // 启动服务器
        server.start();

        // 友好启动提示
        System.out.println("We are getting started.. Hello World!");
    }
}

Java API文档中的代码片段

Java 18之前,开发者主要使用@code注解在Javadoc注释中插入代码示例。这种方式功能有限且需要变通方案,例如难以验证代码片段内容、实现语法高亮或插入链接和转义字符。

JEP 413提出使用@snippet标签作为新方案。该标签既可声明内联片段(代码直接包含在标签内),也可声明外部片段(代码从独立源文件读取)。以下为内联片段示例:

1
2
3
4
5
6
7
8
/**
 * 以下代码展示如何使用{@code Optional.isPresent}:
 * {@snippet :
 * if (v.isPresent()) {
 *     System.out.println("v: " + v.get());
 * }
 * }
 */

代码位于花括号内,开括号后紧跟@snippet标签。Javadoc工具现支持指定链接、代码高亮等功能。详见JEP 413。

默认UTF-8字符集

此前版本中,默认字符集在Java运行时启动时确定,取决于用户区域设置和默认编码。例如Windows系统为windows-1252,macOS系统除POSIX C区域外均为UTF-8。Java 18起,所有操作系统均默认使用UTF-8。

可通过设置file.encoding=COMPAT恢复Java 17的算法,例如运行java -Dfile.encoding=COMPAT

准备移除finalize()

Java开发者通常熟悉finalize()方法。自Java 9起,官方建议使用try-with-resources语句或新的Cleaner API替代该方法。JEP 421帮助开发者为最终移除finalization做准备,可通过–finalization=disabled选项运行应用,观察无finalize()方法时的行为。

注意: 最新Inside Java播客讨论了finalization问题及Java 18预期变化。详见JEP 421文档。

Java 18中的预览功能

部分Java 18开发阶段的功能仍处于预览状态,包括:

  • Vector API(JEP 417)
  • 外部函数与内存API(JEP 419)
  • switch模式匹配(JEP 420)

下载Java 18

可通过Eclipse Adoptium下载早期访问版Eclipse Temurin构建版本尝试Java 18。Temurin是Adoptium的OpenJDK发行版名称。

若需对比当前Java版本与Java 18特性,推荐使用Java Almanac,其中包含Java 18所有新特性与变更列表页面。

结语

本文快速浏览了Java 18的部分亮点。请持续关注Red Hat Developer OpenJDK页面获取更多Java 18更新,也可开始使用Red Hat构建的OpenJDK。

← 上一篇博文 | 下一篇博文 →

目录

  • Java的新简单Web服务器
  • Java API文档中的代码片段
  • 默认UTF-8字符集
  • 准备移除finalize()
  • Java 18中的预览功能
  • 下载Java 18
  • 结语

特色标签
administrator, ant, automation, build, cache, ci, command, computers, continous, design, design-patterns, docker, engineering, fedora, gof, how-to, howto, ibm, infinispan, integration, jacl, java, jdbc, jdk-21, jython, kubernetes, llm, migration, mq, openjdk, openshift, patterns, programming, quarkus, redhat, release, rhel, scm, scripting, singleton, singleton-pattern, software, software-development, svn, sysadmin, tips, tools, utils, websphere, wsadmin

版权所有 © Shaaf’s blog 2025

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计