JDK13新特性

1. Switch Expressions(标准版)(JEP 354)

在JDK 12中作为预览功能引入后,Switch Expressions在JDK 13中成为正式特性,允许在switch语句中使用yield返回值。

public class SwitchExpressions {
    public static String dayInfo(int day) {
        return switch (day) {
            case 1, 2, 3, 4, 5 -> "工作日";
            case 6, 7 -> "周末";
            default -> throw new IllegalArgumentException("无效的天数: " + day);
        };
    }

    public static void main(String[] args) {
        System.out.println(dayInfo(6));
    }
}

2. Text Blocks(预览版)(JEP 355)

引入了多行文本块,使得编写字符串字面量更加方便,特别是对于JSON、HTML等格式的文本。

public class TextBlocks {
    public static void main(String[] args) {
        String html = """
            <html>
                <body>
                    <p>Hello, world!</p>
                </body>
            </html>
        """;

        System.out.println(html);
    }
}

3. Dynamic CDS Archives(JEP 350)

允许在Java应用程序执行结束时动态归档类,以扩展应用程序类数据共享(CDS)。

java -Xshare:dump

4. ZGC: Uncommit Unused Memory(JEP 351)

Z Garbage Collector(ZGC)的新特性,允许它在不再需要时释放未使用的内存页给操作系统。

5. Reimplement the Legacy Socket API(JEP 353)

重新实现了遗留的Socket API,提高了性能和可维护性。

import java.io.*;
import java.net.*;

public class SocketExample {
    public static void main(String[] args) throws IOException {
        try (Socket socket = new Socket("example.com", 80)) {
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            out.println("GET / HTTP/1.1");
            out.println("Host: example.com");
            out.println();
            String inputLine;
            while ((inputLine = in.readLine()) != null)
                System.out.println(inputLine);
            in.close();
        }
    }
}

6. Unicode 12.1支持

更新了对Unicode标准的支持,包括新增字符和表情符号。

public class UnicodeExample {
    public static void main(String[] args) {
        System.out.println("\uD83E\uDD73"); // 展示一个Unicode 12.1中的表情符号
    }
}