Java作为企业级开发的主流语言,自Java 8发布以来经历了重大变革。本文将系统梳理从Java 8到最新Java 22的主要新特性,帮助开发者掌握现代Java开发的核心技术。
Java 8 (2014):函数式编程的引入
Java 8是Java发展史上的里程碑版本,引入了函数式编程范式。
Lambda表达式
// 旧方式
Collections.sort(list, new Comparator<String>() {
public int compare(String a, String b) {
return b.compareTo(a);
}
});
// Java 8方式
Collections.sort(list, (a, b) -> b.compareTo(a));Stream API
List<String> filtered = list.stream()
.filter(s -> s.startsWith("A"))
.map(String::toUpperCase)
.sorted()
.collect(Collectors.toList());方法引用
Arrays.asList("a","b","c").forEach(System.out::println);默认方法
interface Vehicle {
default void print() {
System.out.println("我是一辆车!");
}
}Optional类
Optional<String> optional = Optional.ofNullable(null);
System.out.println(optional.orElse("default"));Java 9 (2017):模块化系统
模块系统(Jigsaw)
module com.example.myapp {
requires java.base;
requires java.sql;
exports com.example.myapp.api;
}集合工厂方法
List<String> list = List.of("a", "b", "c");
Set<String> set = Set.of("a", "b", "c");
Map<String, String> map = Map.of("k1", "v1", "k2", "v2");接口私有方法
interface MyInterface {
private void privateMethod() {
System.out.println("私有接口方法");
}
}Java 10 (2018):局部变量类型推断
var关键字
var list = new ArrayList<String>(); // 推断为ArrayList<String>
var stream = list.stream(); // 推断为Stream<String>Java 11 (2018):首个LTS版本
HTTP客户端(标准化)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println);字符串API增强
" hello ".strip(); // "hello"
"hello".repeat(3); // "hellohellohello"
"".isBlank(); // trueJava 12-14:预览特性引入
Switch表达式(Java 12预览,14标准化)
String dayType = switch (day) {
case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> "工作日";
case SATURDAY, SUNDAY -> "周末";
};文本块(Java 13预览,15标准化)
String json = """
{
"name": "John",
"age": 30
}
""";instanceof模式匹配(Java 14预览,16标准化)
if (obj instanceof String s) {
System.out.println(s.length());
}Java 15-17:新特性巩固
密封类(Java 15预览,17标准化)
public sealed class Shape permits Circle, Square, Rectangle {
// ...
}
public final class Circle extends Shape {
private final double radius;
// ...
}记录类(Java 16)
public record Point(int x, int y) {}
Point p = new Point(10, 20);
System.out.println(p.x()); // 10Java 18-20:持续创新
简单Web服务器(Java 18)
jwebserver -p 8000虚拟线程预览(Java 19)
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
IntStream.range(0, 10_000).forEach(i -> {
executor.submit(() -> {
Thread.sleep(Duration.ofSeconds(1));
return i;
});
});
}switch模式匹配(Java 20预览)
static String formatterPatternSwitch(Object obj) {
return switch (obj) {
case Integer i -> String.format("int %d", i);
case Long l -> String.format("long %d", l);
case Double d -> String.format("double %f", d);
case String s -> String.format("String %s", s);
default -> obj.toString();
};
}Java 21 (2023 LTS):虚拟线程正式发布
虚拟线程
Thread.startVirtualThread(() -> {
System.out.println("Hello from virtual thread!");
});序列集合
interface SequencedCollection<E> extends Collection<E> {
// 新增方法
SequencedCollection<E> reversed();
void addFirst(E);
void addLast(E);
E getFirst();
E getLast();
E removeFirst();
E removeLast();
}Java 22 (2024):最新特性
未命名变量和模式
try {
int value = Integer.parseInt(s);
} catch (NumberFormatException _) {
System.out.println("无效数字");
}字符串模板(预览)
String name = "Joan";
String info = STR."My name is \{name}";总结与建议
从Java 8到Java 22,Java语言经历了从面向对象到函数式编程,再到现代并发模型的转变。对于开发者而言:
- 生产环境建议使用LTS版本(目前为Java 11、17、21)
- 新项目建议从Java 17或21开始
- 关注虚拟线程、记录类、模式匹配等现代特性
- 逐步将Lambda和Stream API应用到现有代码中
Java的持续创新确保了其在企业级开发中的领先地位,掌握这些新特性将显著提升开发效率和代码质量。
















