Java 17~18 新特性

特性列表

版本 特性
Java 17(LTS 1. switch 类型推断
2. 伪随机数变化
Java 18 1. 使用UTF-8编码
2. jwebserver
3. Object、Thread部分方法标记废弃
4. 增加@snippet注解

Java 17

switch 类型推断,伪随机数变化


import java.util.random.RandomGenerator;
import java.util.random.RandomGeneratorFactory;

/**
 * @author imyzt
 * @date 2023/12/17
 * @description switch 类型推断
 */
public class SwitchFuture {

    public static void main(String[] args) {

        Animal animal = new Cat();
        switch (animal) {
            case Cat c -> c.say();
            case Dog d -> d.say();
            case null -> System.out.println("null");
            default -> System.out.println("default");
        }

        /*
        ➜  java17 git:(master) ✗ java -version
        openjdk version "21.0.1" 2023-10-17 LTS
        OpenJDK Runtime Environment Corretto-21.0.1.12.1 (build 21.0.1+12-LTS)
        OpenJDK 64-Bit Server VM Corretto-21.0.1.12.1 (build 21.0.1+12-LTS, mixed mode, sharing)
        ➜  java17 git:(master) ✗ java SwitchFuture.java
        汪汪汪
         */

        RandomGeneratorFactory<RandomGenerator> factory = RandomGeneratorFactory.getDefault();
        RandomGenerator randomGenerator = factory.create();
        randomGenerator.ints(10).forEach(System.out::println);
        //261824154
        //540138312
        //-1600972486
        //-467718820
        //-660092685
        //-1149689401
        //-46916737
        //2110685130
        //-1910355456
        //-814203516
    }
}

class Animal {

}

class Cat extends Animal {
    void say() {
        System.out.println("汪汪汪");
    }
}
class Dog extends Animal {
    void say() {
        System.out.println("喵喵喵");
    }
}

Java 18

默认使用UTF-8字符编码

从jdk18开始,默认使用UTF-8字符编码,如果需要修改为其他字符,可以使用命令 -Dfile.encoding=UTF-8来指定。

简单web服务器

➜  java17 git:(master) ✗ jwebserver            
默认情况下绑定到环回。如果要表示所有接口,请使用 "-b 0.0.0.0" 或 "-b ::"。
为 127.0.0.1 端口 8000 上的 /xxxxxxxxx目录/java17 及子目录提供服务
URL http://127.0.0.1:8000/
127.0.0.1 - - [17/12月/2023:10:38:18 +0800] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [17/12月/2023:10:38:18 +0800] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [17/12月/2023:10:38:20 +0800] "GET /SwitchFuture.java HTTP/1.1" 200 -

将被废弃的方法

  • java.lang.Object#finalize
  • java.lang.Thread#stop

新增@snippet展示代码

之前需要用<code>标签框代码,不方便,现在通过@snippet还是框代码
snippet