Clarence Java DocClarence Java Doc
开发总结
Java
数据库
缓存
JVM
Spring
微服务
消息队列
高并发
分布式
高可用
设计模式
场景题
Netty
云原生
算法
系统架构
开发协议
IOT
人工智能
开发总结
Java
数据库
缓存
JVM
Spring
微服务
消息队列
高并发
分布式
高可用
设计模式
场景题
Netty
云原生
算法
系统架构
开发协议
IOT
人工智能
  • Java 基础
  • Java 高级
  • JAVA 8+ 特性
  • Java总结-Java

JAVA 8+ 特性

本文重点介绍 Java 8 以后各版本核心新特性,适合想系统梳理版本演进的开发者。

一、Java 8 升 Java 11 重要特性必读

Java 11 是 LTS 版本,许多项目从 Java 8 直接升级,需重点掌握:

1、模块系统(Java 9 引入)

Java 9 引入模块化系统 Jigsaw,利用 module-info.java 管理依赖与封装。

示例模块定义:

module com.example.myapp {
    requires java.sql;
    exports com.example.myapp.api;
}

使用模块时,若代码使用反射访问 JDK 内部类,可能需要启动参数:

--add-exports java.base/sun.nio.ch=ALL-UNNAMED
--add-opens java.base/java.lang=ALL-UNNAMED

2、新 HTTP 客户端 API(Java 11)

Java 11 正式标准化新的 HttpClient,替代旧的 HttpURLConnection。

示例代码:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandlers;

public class HttpClientExample {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://example.com"))
                .GET()
                .build();

        HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
        System.out.println("状态码: " + response.statusCode());
        System.out.println("响应体: " + response.body());
    }
}

3、局部变量类型推断(Java 10)

使用 var 简化局部变量声明:

import java.util.ArrayList;

public class VarExample {
    public void test() {
        var list = new ArrayList<String>();
        list.add("Java 10 var");
        for (var item : list) {
            System.out.println(item);
        }
    }

    public static void main(String[] args) {
        new VarExample().test();
    }
}

4、String 新增实用方法(Java 11)

示例展示 isBlank(), strip(), lines(), repeat():

public class StringApiExample {
    public void test() {
        String str = "  Hello World  \nJava 11  ";

        System.out.println("isBlank: " + str.isBlank());
        System.out.println("strip: >" + str.strip() + "<");

        System.out.println("lines:");
        str.lines().forEach(System.out::println);

        System.out.println("repeat:");
        System.out.println("ha".repeat(3));
    }

    public static void main(String[] args) {
        new StringApiExample().test();
    }
}

5、文件读写简化(Java 11)

import java.nio.file.Files;
import java.nio.file.Path;

public class FileExample {
    public void test() throws Exception {
        Path path = Path.of("example.txt");
        Files.writeString(path, "Hello, Java 11!");
        String content = Files.readString(path);
        System.out.println(content);
    }

    public static void main(String[] args) throws Exception {
        new FileExample().test();
    }
}

6、Lambda 参数中使用 var(Java 11)

import java.util.List;

public class LambdaVarExample {
    public void test() {
        List<String> list = List.of("a", "b", "c");
        list.forEach((var s) -> System.out.println(s.toUpperCase()));
    }

    public static void main(String[] args) {
        new LambdaVarExample().test();
    }
}

7、生产环境性能监控工具集成

Java 11 集成了 Flight Recorder 和 Mission Control,方便性能监控。

二、Java 11 升 Java 17 重要特性必读

Java 17 是又一个 LTS 版本,包含许多语法糖和新 API。

1、文本块(Java 15)

public class TextBlockExample {
    public void test() {
        String json = """
                {
                  "name": "Java",
                  "version": 17
                }
                """;
        System.out.println(json);
    }

    public static void main(String[] args) {
        new TextBlockExample().test();
    }
}

2、模式匹配(instanceof)(Java 16)

public class PatternMatchingExample {
    public void test(Object obj) {
        if (obj instanceof String s) {
            System.out.println(s.toLowerCase());
        } else {
            System.out.println("Not a string");
        }
    }

    public static void main(String[] args) {
        new PatternMatchingExample().test("Hello");
        new PatternMatchingExample().test(123);
    }
}

3、Sealed 类(Java 17)

public sealed class Shape permits Circle, Square {
}

final class Circle extends Shape {
}

final class Square extends Shape {
}

public class SealedExample {
    public static void main(String[] args) {
        Shape shape1 = new Circle();
        Shape shape2 = new Square();
        System.out.println(shape1.getClass().getSimpleName());
        System.out.println(shape2.getClass().getSimpleName());
    }
}

4、Switch 表达式(Java 14)

public class SwitchExpressionExample {
    public void test() {
        int day = 5;
        int result = switch (day) {
            case 1, 7 -> 6;
            case 2 -> 7;
            default -> {
                System.out.println("Invalid day");
                yield -1;
            }
        };
        System.out.println(result);
    }

    public static void main(String[] args) {
        new SwitchExpressionExample().test();
    }
}

5、记录类(Record,Java 14)

public record Person(String name, int age) {
}

public class RecordExample {
    public static void main(String[] args) {
        Person p = new Person("Alice", 30);
        System.out.println(p.name());
        System.out.println(p.age());
    }
}

6、Java 17 新增与改进

外部函数与内存 API (Incubator)

// 伪代码示例,实际使用需引入相关模块支持
/*
MemorySegment segment = MemorySegment.allocateNative(100);
MemoryAccess.setIntAtOffset(segment, 0, 42);
int value = MemoryAccess.getIntAtOffset(segment, 0);
System.out.println("Value: " + value);
segment.close();
*/

垃圾回收改进

G1 和 ZGC 垃圾回收器更稳定,延迟更低。

三、Java 21(最新 LTS)核心亮点

1、虚拟线程(Virtual Threads)

public class VirtualThreadExample {
    public static void main(String[] args) {
        Thread.startVirtualThread(() -> {
            System.out.println("虚拟线程运行: " + Thread.currentThread());
        });
    }
}

2、结构化并发

伪代码:

/*
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
    Future<String> f1 = scope.fork(() -> task1());
    Future<String> f2 = scope.fork(() -> task2());
    scope.join();
    scope.throwIfFailed();
    System.out.println(f1.resultNow());
    System.out.println(f2.resultNow());
}
*/

3、模式匹配 for switch

public class SwitchPatternExample {
    static String formatter(Object obj) {
        return switch (obj) {
            case Integer i -> String.format("int %d", i);
            case String s -> String.format("String %s", s);
            default -> obj.toString();
        };
    }

    public static void main(String[] args) {
        System.out.println(formatter(100));
        System.out.println(formatter("Java 21"));
    }
}
Last Updated:
Contributors: Clarence, hello0709
Prev
Java 高级
Next
Java总结-Java