news 2026/4/30 2:15:14

JDK各版本新增特性详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JDK各版本新增特性详解

一、JDK 8(LTS,2014年3月)-革命性更新

核心特性

  1. Lambda表达式

// 旧方式 Collections.sort(list, new Comparator<String>() { @Override public int compare(String a, String b) { return a.compareTo(b); } }); // Lambda方式 Collections.sort(list, (a, b) -> a.compareTo(b));

2.Stream API

List<String> filtered = list.stream() .filter(s -> s.startsWith("A")) .map(String::toUpperCase) .sorted() .collect(Collectors.toList());

3.默认方法(Default Methods)

interface Vehicle { default void print() { System.out.println("我是一辆车"); } } interface FourWheeler { default void print() { System.out.println("我有四个轮子"); } } class Car implements Vehicle, FourWheeler { @Override public void print() { Vehicle.super.print(); FourWheeler.super.print(); } }

4.新的日期时间API

// 旧Date问题多,新API更清晰 LocalDate today = LocalDate.now(); LocalDate tomorrow = today.plusDays(1); LocalTime now = LocalTime.now(); // 格式化 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formatted = LocalDateTime.now().format(formatter);

5.Optional类

Optional<String> optional = Optional.ofNullable(getString()); optional.ifPresent(System.out::println); String result = optional.orElse("默认值");

常用功能

  • 方法引用list.forEach(System.out::println)

  • 函数式接口@FunctionalInterface

  • Nashorn JavaScript引擎

  • Base64支持

二、JDK 11(LTS,2018年9月)

核心特性

  1. 局部变量类型推断增强

var list = new ArrayList<String>(); // 推断为ArrayList<String> var stream = list.stream(); // 推断为Stream<String>
  1. HTTP Client API(标准化)

HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com")) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
  1. 字符串增强方法

String str = " Hello World "; str.isBlank(); // 检查是否为空或仅空白字符 str.strip(); // 去除首尾空白(比trim()更严格) str.repeat(3); // 重复字符串 str.lines().count(); // 行数统计
  1. 单文件源码程序

# 直接运行.java文件 java HelloWorld.java
  1. Flight Recorder(JFR)开源

# 启动JFR java -XX:StartFlightRecording=duration=60s,filename=recording.jfr

性能改进

  • ZGC:可扩展的低延迟垃圾收集器(实验性)

  • Epsilon GC:无操作垃圾收集器(性能测试用)

三、JDK 17(LTS,2021年9月)- 当前主流LTS

核心特性

  1. 密封类(Sealed Classes)

public abstract sealed class Shape permits Circle, Rectangle, Triangle { // 只有这三个子类可以继承 } public final class Circle extends Shape { /* ... */ } public final class Rectangle extends Shape { /* ... */ } public final class Triangle extends Shape { /* ... */ }
  1. 模式匹配switch(预览)

static String formatter(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(); }; }
  1. 文本块(标准化)

// 多行字符串 String json = """ { "name": "张三", "age": 25, "address": { "city": "北京", "street": "中关村" } } """;

重要移除

  • 移除了Applet API

  • 移除了Security Manager

四、各版本特性速查表

JDK 9(2017)

// 模块系统(Project Jigsaw) module com.example { requires java.base; exports com.example.api; } // 集合工厂方法 List<String> list = List.of("A", "B", "C"); Set<Integer> set = Set.of(1, 2, 3); Map<String, Integer> map = Map.of("A", 1, "B", 2); // 私有接口方法 interface MyInterface { default void method1() { commonMethod(); } private void commonMethod() { // 私有辅助方法 } }

JDK 10(2018)

  • 局部变量类型推断(var)

JDK 12-16(非LTS重要特性)

JDK 14
// instanceof模式匹配 if (obj instanceof String s) { // 可以直接使用s System.out.println(s.length()); } // Records(数据类) record Point(int x, int y) { } Point p = new Point(10, 20); System.out.println(p.x()); // 自动生成getter
JDK 15
  • 文本块转为正式功能

  • Shenandoah GC成为正式功能

JDK 16
  • Records转为正式功能

  • Pattern Matching for instanceof转为正式

五、企业开发常用功能详解

1. Stream API高级用法

// 分组统计 Map<Department, Long> countByDept = employees.stream() .collect(Collectors.groupingBy( Employee::getDepartment, Collectors.counting() )); // 并行流处理 List<String> results = dataList.parallelStream() .filter(item -> item.isValid()) .map(item -> process(item)) .collect(Collectors.toList()); // 自定义收集器 Collector<Employee, ?, Map<String, Double>> avgSalaryByDept = Collectors.groupingBy( Employee::getDepartment, Collectors.averagingDouble(Employee::getSalary) );

2. CompletableFuture异步编程

CompletableFuture<String> future1 = CompletableFuture .supplyAsync(() -> fetchDataFromAPI1()); CompletableFuture<String> future2 = CompletableFuture .supplyAsync(() -> fetchDataFromAPI2()); CompletableFuture<Void> combined = CompletableFuture .allOf(future1, future2); // 组合多个结果 future1.thenCombine(future2, (result1, result2) -> processResults(result1, result2)) .exceptionally(ex -> handleError(ex));

3. Optional最佳实践

// 链式调用 String result = Optional.ofNullable(user) .map(User::getAddress) .map(Address::getCity) .orElse("未知城市"); // 抛出异常 User user = userRepository.findById(id) .orElseThrow(() -> new UserNotFoundException(id)); // 条件执行 optionalUser.ifPresentOrElse( user -> processUser(user), () -> log.warn("用户不存在") );

六、版本选择建议

生产环境推荐

  • 新项目:JDK 17+(LTS,长期支持)

  • 现有系统

    • 金融/保险:JDK 11或17

    • 互联网:根据框架支持选择(Spring Boot 3+需要JDK 17)

    • 传统企业:JDK 8(逐步迁移)

迁移注意事项

  1. JDK 8 → JDK 11

    • 移除Java EE模块(javax.xml.ws等)

    • 需要添加相应依赖

    • 检查废弃API使用

  2. JDK 11 → JDK 17

    • 密封类、记录类等新特性

    • 更强的封装(反射限制)

    • 移除过时GC算法

版本维护周期

  • Oracle JDK:每6个月一个版本,每3年一个LTS

  • 商用支持:LTS版本有长期技术支持

  • 开源选择:OpenJDK、Amazon Corretto、Azul Zulu

七、实用工具和命令

JVM参数调优

# 内存设置 -Xms2g -Xmx2g -Xmn1g # GC选择(JDK 11+) -XX:+UseG1GC # 记录GC日志 -Xlog:gc*:file=gc.log:time,uptime,level,tags # 开启JFR(JDK 11+) -XX:StartFlightRecording=delay=5s,duration=60s,filename=recording.jfr

模块化开发(JDK 9+)

// module-info.java module com.myapp { requires java.base; requires java.sql; requires transitive com.mylib; // 传递依赖 exports com.myapp.api; opens com.myapp.internal to spring.core; }

总结

JDK的发展聚焦于:

  1. 语言现代化:Lambda、模式匹配、记录类

  2. 性能提升:新GC算法、JIT优化

  3. 开发效率:Stream API、HTTP Client

  4. 安全性:模块化、强封装

  5. 云原生:容器支持、轻量级运行时

建议持续关注OpenJDK官网和JEP(JDK Enhancement Proposal)获取最新特性信息。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:15:55

【课程设计/毕业设计】基于SpringBoot + Vue的医院预约挂号系统的设计与实现基于SpringBoot社区医疗预约挂号平台的设计与实现【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/29 18:07:03

ArcGIS数据库文件和普通文件添加字段的区别

普通的shp文件添加字段时&#xff0c;如果字段类型是数字类型的&#xff0c;例如短整型&#xff0c;则在添加字段时&#xff0c;就会自动赋予其属性值为0。则在进行属性界定时&#xff0c;若要赋予0值为特殊含义&#xff0c;就很不方便。而数据库中的矢量数据&#xff0c;添加字…

作者头像 李华
网站建设 2026/4/29 21:45:42

[STM32C0] 【STM32C092RC 测评】+08 定时器1输出可变脉宽

今天对脉冲宽度进行测试&#xff1a;一&#xff1a;PWM脉宽知识分享&#xff1a; PWM&#xff08;脉冲宽度调制&#xff09;的脉冲宽度是指在一个周期内信号处于高电平&#xff08;或有效状态&#xff09;的时间长度&#xff0c;通常用时间单位&#xff08;如微秒μs、毫秒ms&a…

作者头像 李华
网站建设 2026/4/29 0:58:58

[STM32C0] 【STM32C092RC 测评】+ 03 板载串口2输出测试

一&#xff1a;通用同步/异步收发器(USART) 这些设备嵌入四个通用同步/异步接收器/发送器&#xff0c;其通信速度高达6 Mbit/s。 它们提供CTS、RTS和RS485 DE信号的硬件管理、多处理器通信模式、同步SPI通信和单线半双工通信。 双工通信模式。有些还支持智能卡通信(ISO7816)、I…

作者头像 李华
网站建设 2026/4/28 11:58:14

基于springboot的医院资源管理系统(11635)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告&#xff09;远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/4/25 16:57:33

用MCU一个GPIO自锁PMOS就能实现按键开关机

用MCU&#xff08;微控制器&#xff09;一个GPIO控制PMOS自锁来实现按键开关机是一个非常常见且简洁的电路设计。下面详细说明一下如何使用这种方案&#xff1a;1. 基本原理这种设计利用了PMOS晶体管的开关特性。PMOS晶体管通常在源极接正电源、漏极接负载时工作。通过控制其栅…

作者头像 李华