Java 8/9/10+ 的新特性

news/2025/11/26 15:11:33/文章来源:https://www.cnblogs.com/Lmmm8/p/19272928
Java 8 是 Java 历史上的里程碑版本(引入大量革命性特性),而 Java 9+ 则以 模块化 为核心,逐步优化性能、增强语法灵活性、完善工具链。以下按版本梳理核心新特性,聚焦开发中高频使用的功能:

一、Java 8(2014 年,最具革命性的版本)

Java 8 引入的特性彻底改变了 Java 编程风格,至今仍是主流生产版本,核心围绕 Lambda 表达式 和 Stream API 展开。

1. 核心语法特性

(1)Lambda 表达式(闭包)

  • 简化 函数式接口(仅含一个抽象方法的接口)的实现,用 -> 语法替代匿名内部类,代码更简洁。
  • 语法:(参数列表) -> 表达式/代码块
  • 示例:
    java
     
    运行
     
     
     
     
    // 替代匿名内部类(Runnable 是函数式接口)
    new Thread(() -> System.out.println("Lambda 简化线程")).start();// 集合排序(替代 Comparator 匿名类)
    List<String> list = Arrays.asList("a", "bc", "d");
    list.sort((s1, s2) -> Integer.compare(s1.length(), s2.length()));
     
     

(2)函数式接口 & @FunctionalInterface 注解

  • 官方提供常用函数式接口(位于 java.util.function 包),避免重复定义:
    • Predicate<T>:接收 T,返回 boolean(断言)
    • Consumer<T>:接收 T,无返回值(消费)
    • Function<T, R>:接收 T,返回 R(转换)
    • Supplier<T>:无参数,返回 T(供给)
  • 示例:
    java
     
    运行
     
     
     
     
    // Predicate 断言字符串非空
    Predicate<String> isNotEmpty = s -> s != null && !s.isEmpty();
    System.out.println(isNotEmpty.test("Java8")); // true
     
     

(3)方法引用(:: 语法)

  • 简化 Lambda 表达式,直接引用已存在的方法(静态方法、实例方法、构造方法),语法更简洁。
  • 示例:
    java
     
    运行
     
     
     
     
    // 引用静态方法:Integer::compare
    list.sort(Integer::compare);// 引用实例方法:String::length
    list.sort(Comparator.comparingInt(String::length));// 引用构造方法:ArrayList::new
    List<String> newList = list.stream().collect(Collectors.toCollection(ArrayList::new));
     
     

2. 集合 & 数据处理

(1)Stream API(java.util.stream

  • 流式处理集合 / 数组,支持 链式调用惰性求值,简化过滤、映射、聚合等操作(类似 SQL 语法)。
  • 核心操作:中间操作(filter/map/sorted)+ 终端操作(collect/forEach/count)。
  • 示例:
    java
     
    运行
     
     
     
     
    List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5, 6);
    // 过滤偶数 → 平方 → 求和
    int sum = nums.stream().filter(n -> n % 2 == 0) // 中间操作(惰性).map(n -> n * n)        // 中间操作(惰性).reduce(0, Integer::sum); // 终端操作(触发执行)
    System.out.println(sum); // 2²+4²+6²=56
     
     

(2)Optional<T>

  • 解决 空指针异常(NPE),封装可能为 null 的对象,提供安全的访问方法(isPresent/orElse/ifPresent)。
  • 示例:
    java
     
    运行
     
     
     
     
    Optional<String> optional = Optional.ofNullable(getNullableString());
    // 存在则打印,否则执行默认逻辑
    optional.ifPresent(System.out::println);
    String result = optional.orElse("默认值");
     
     

3. 其他重要特性

  • 接口默认方法(default)和静态方法:接口可定义带实现的方法,避免修改接口时破坏实现类(如 Collection.forEach())。
  • Date/Time API(JSR 310):替代旧的 Date/Calendar(线程不安全、API 混乱),新 API 不可变、线程安全(LocalDate/LocalTime/Instant 等)。
    java
     
    运行
     
     
     
     
    LocalDate today = LocalDate.now();
    LocalDate tomorrow = today.plusDays(1);
     
     
  • 重复注解(@Repeatable:允许同一个注解在同一元素上重复使用(如 @Test 重复标注测试方法)。

二、Java 9(2017 年,模块化核心)

Java 9 的核心是 JPMS(Java Platform Module System,Java 平台模块系统),同时优化了 Java 8 特性,新增实用工具。

1. 核心:模块化(Module)

  • 解决传统 JAR 依赖混乱、类路径(ClassPath)冗余问题,将代码和资源封装为 模块,明确依赖关系和对外暴露的 API。
  • 关键文件:module-info.java(模块描述文件),放在源代码根目录。
  • 示例(模块定义):
    java
     
    运行
     
     
     
     
    // module-info.java
    module com.example.user {requires com.example.common; // 依赖其他模块exports com.example.user.service; // 对外暴露的包(其他模块可访问)provides com.example.user.api.UserApi with com.example.user.impl.UserImpl; // 服务提供
    }
     
     

2. 语法 & API 增强

  • 接口私有方法:接口中可定义 private 方法(供默认方法调用,避免代码重复)。
    java
     
    运行
     
     
     
     
    interface MyInterface {default void doSomething() {commonLogic(); // 调用私有方法}private void commonLogic() {System.out.println("接口私有方法");}
    }
     
     
  • Stream API 增强:新增 takeWhile()(取前缀,满足条件则停止)、dropWhile()(丢弃前缀)、ofNullable()(支持单元素 null)。
    java
     
    运行
     
     
     
     
    Stream.of(1,2,3,4,5).takeWhile(n -> n < 3).forEach(System.out::print); // 12
     
     
  • Optional 增强:新增 ifPresentOrElse()(存在则执行,否则执行默认逻辑)、stream()(转为 Stream)。
    java
     
    运行
     
     
     
     
    optional.ifPresentOrElse(System.out::println,() -> System.out.println("值不存在")
    );
     
     

3. 工具 & 其他特性

  • JShell(交互式编程工具):类似 Python 终端,支持即时执行 Java 代码(调试、学习常用)。
    bash
     
    运行
     
     
     
     
    jshell> int a = 10;
    a ==> 10
    jshell> a * 2
    $2 ==> 20
     
     
  • 不可变集合工厂方法List.of()/Set.of()/Map.of(),创建不可变集合(比 Collections.unmodifiableXXX 更高效、简洁)。
    java
     
    运行
     
     
     
     
    List<String> immutableList = List.of("a", "b", "c");
     
     
  • HTTP/2 客户端(预览):替代旧的 HttpURLConnection,支持 HTTP/2 和 WebSocket,API 更简洁(Java 11 正式转正)。

三、Java 10(2018 年,短期支持版本)

Java 10 以 局部变量类型推断 为核心,其他多为性能优化和小特性,支持周期较短(6 个月)。

核心特性:局部变量类型推断(var 关键字)

  • 允许用 var 替代局部变量的显式类型(编译器根据赋值推断类型),简化代码(仅支持局部变量,不支持成员变量、方法参数、返回值)。
  • 示例:
    java
     
    运行
     
     
     
     
    var list = new ArrayList<String>(); // 推断为 List<String>
    var map = new HashMap<Integer, String>(); // 推断为 Map<Integer, String>
    var stream = list.stream(); // 推断为 Stream<String>
     
     
  • 限制:必须显式赋值(var x; 错误)、不能用于 lambda 参数((var x) -> x 错误,Java 11 支持)。

其他特性

  • GC 优化:默认启用 G1 GC(替代 Parallel GC),提升大内存应用的性能。
  • 应用类数据共享(AppCDS):扩展 CDS,允许将应用类加入共享归档,缩短启动时间。
  • Optional 新增 or() 方法:返回另一个 Optional(区别于 orElse 直接返回值)。

四、Java 11+ 关键特性(高频实用)

Java 11 是 LTS(长期支持)版本,后续 LTS 为 17、21,以下聚焦开发中常用的新增特性:

1. Java 11(2018 年,LTS)

  • var 支持 lambda 参数:解决 lambda 参数类型重复问题(配合注解使用)。
    java
     
    运行
     
     
     
     
    // Java 11 支持
    Function<Integer, String> func = (var x) -> String.valueOf(x);
     
     
  • HTTP 客户端正式版java.net.http 包转正,支持同步 / 异步 HTTP 请求、WebSocket。
    java
     
    运行
     
     
     
     
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://www.baidu.com")).GET().build();
    // 同步请求
    String response = client.send(request, HttpResponse.BodyHandlers.ofString()).body();
     
     
  • 字符串增强方法isBlank()(判断空白字符串)、lines()(按行分割为 Stream)、strip()(去除首尾空白,支持全角)。
    java
     
    运行
     
     
     
     
    String str = "  Java 11\n  新特性  ";
    str.isBlank(); // false
    str.lines().forEach(System.out::println); // 输出两行(去除换行符)
    str.strip(); // "Java 11\n  新特性"(区别于 trim():strip 支持全角空格)
     
     
  • 移除冗余 API:如 Thread.stop()sun.misc.Unsafe(部分功能迁移到 jdk.unsupported 模块)。

2. Java 12-16(短期版本,关键特性预览)

  • Java 12Switch 表达式预览(箭头语法,直接返回值)、Collectors.teeing()(合并两个收集器结果)。
  • Java 14Switch 表达式正式版、Record 类(预览)(简化不可变数据类,自动生成 equals/hashCode/toString)。
    java
     
    运行
     
     
     
     
    // Record 类(无需手动写 getter、构造方法)
    record User(String name, int age) {}
    User user = new User("Alice", 25);
    System.out.println(user.name()); // Alice
     
     
  • Java 16:Record 类正式版、密封类(Sealed Classes,正式版)(限制类的继承,避免滥用继承)。
    java
     
    运行
     
     
     
     
    // 密封类:仅允许指定子类继承
    sealed class Shape permits Circle, Rectangle, Triangle {abstract double area();
    }
    final class Circle extends Shape { /* ... */ }
     
     

3. Java 17(2021 年,LTS,目前主流)

Java 17 是继 8、11 后的重要 LTS 版本,合并了之前短期版本的预览特性,同时优化性能和安全性。
  • 密封类(正式版):如上述示例,控制类的继承关系,增强代码可维护性。
  • Record 类(正式版):广泛用于 DTO、VO 等不可变数据载体,大幅减少模板代码。
  • Switch 表达式正式版:支持箭头语法和 yield 返回值,替代传统 case 的 break
    java
     
    运行
     
     
     
     
    int num = 2;
    String result = switch (num) {case 1 -> "一";case 2 -> "二";default -> "其他";
    };
     
     
  • 移除实验性 AOT 编译和 JIT 编译器,优化 G1 GC(默认启用)。
  • 增强 NullPointerException 提示:明确指出哪个变量为 null,便于调试。

4. Java 18+(最新特性预览)

  • Java 18:UTF-8 成为默认字符集、Simple Web Server(轻量级 HTTP 服务器,用于测试)。
  • Java 21(2023 年,LTS)
    • 虚拟线程(Virtual Threads,正式版):轻量级线程(用户态线程),解决传统线程(内核态)资源占用高的问题,支持百万级并发。
      java
       
      运行
       
       
       
       
      // 虚拟线程示例(无需手动管理线程池)
      Runnable task = () -> System.out.println("虚拟线程执行");
      Thread.startVirtualThread(task); // 启动虚拟线程
       
       
    • 模式匹配增强(instanceof 自动转换)
      java
       
      运行
       
       
       
       
      if (obj instanceof String s) {System.out.println(s.length()); // 无需手动强转
      }
       
       
    • Record 类增强:支持密封 Record、泛型 Record。

五、版本选择建议

  • 生产环境:优先选择 LTS 版本(8、11、17、21),稳定性和支持周期有保障:
    • 若需兼容旧系统:Java 8(生态最成熟,无模块化迁移成本)。
    • 若新建项目:Java 17 或 21(享受 Record、密封类、虚拟线程等新特性,性能更优)。
  • 学习 / 测试:Java 21(体验最新特性,如虚拟线程、模式匹配)。

总结

Java 8 奠定了函数式编程基础(Lambda + Stream),Java 9 引入模块化解决依赖问题,Java 11+ 逐步优化语法(var、Record)、提升性能(虚拟线程)、完善工具链。核心趋势是:简化模板代码、提升并发能力、增强类型安全性、优化性能和可维护性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/977246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年数粒机最新推荐榜:技术实力与市场口碑深度解析,甄选高效精准优质品牌电子数粒机/药片数粒机/胶囊数粒机/自动数粒机公司推荐

引言 在制药、食品、保健品等全球核心行业的生产链路中,数粒机作为决定包装效率与产品合规性的关键设备,其计数精度、运行稳定性与适配能力直接关联企业生产成本控制与品牌信誉。据国际包装机械协会(IPMA)最新测评…

甘老板发红包 拓扑反向建边求值

1.反向建边 2.long long存和 3.tp.size()判断有环 或者是否成立 #include <bits/stdc++.h> using namespace std; int din[10005]; vector<int>e[20005]; int n,m; int dp[10005]; int tps() {vector<i…

2025年深圳旧房改造公司推荐榜

随着深圳市城市更新的深入推进和居民生活品质要求的不断提升,旧房改造市场呈现出蓬勃发展态势。根据深圳市家装家居行业协会发布的《2025年深圳家装行业发展白皮书》显示,深圳旧房改造市场规模已达300亿元,年增长率保持…

2025年河北叛逆行为矫正学校权威推荐榜单:青少年叛逆教育‌/叛逆期管教‌/叛逆少年学校精选

在青少年心理健康问题日益受到重视的今天,专业的叛逆行为矫正教育正以其科学的方法和显著的成效,成为帮助问题青少年重返正轨的重要力量。 据教育部门统计数据显示,2025年我国青少年心理健康问题发生率呈上升趋势,…

赋能智慧监管:视频融合平台EasyCVR助力搭建公共娱乐场所远程监控系统方案

赋能智慧监管:视频融合平台EasyCVR助力搭建公共娱乐场所远程监控系统方案在当前公共娱乐场所安全管理日益重要的背景下,安全管理与合规监管成为运营核心需求。传统监控系统存在兼容性差、远程访问繁琐、告警响应滞后…

2025年加气混凝土板材生产线厂家权威推荐榜单:alc板生产线‌/alc加气板材设备生产厂家‌/蒸压加气混凝土alc板材设备源头厂家精选

在绿色建筑与装配式建筑蓬勃发展的2025年,加气混凝土板材生产线作为ALC板生产的核心装备,其市场需求正以年均15%的速度快速增长。 加气混凝土板材生产线通过自动化、智能化的工艺设计,将粉煤灰、水泥、石灰等原料转…

NOIP 集训 day4 图论 2

强连通强连通分量将强连通分量缩点后是 DAG;Kosaraju 算法求 SCC:先在原图上做 DFS,当结束一个点 \(u\) 搜索时将 \(u\) 压入一个栈中。 将所有边反向,得到一个反向图。 接下来每次从栈中弹出一个点,在反图上 DFS…

中间件定义解析与国产中间件选型与推荐(2025版)

随着关键信息基础设施2027年100%信创替代目标逐步逼近,企业在中间件选型工作中,已实现从“依赖国外产品”向“国产中间件优先”的战略转变。据艾媒咨询2025年最新行业研究数据,中国中间件市场规模将突破167.8亿元,…

2025留学生求职机构口碑推荐-途鸽5万+Offer留学生求职优选

导语 2013 年诞生于北京的途鸽求职(TogoCareer),是国内首家专注留学生 “学业 + 就业” 双轨生涯的专业服务机构。深耕 12 载,其服务网络覆盖全球 380 所顶尖高校,携手 8500 + 世界 TOP 企业行业专家导师与 6200 …

django启动,允许全部ip访问

python manage.py runserver 0.0.0.0:8000

2025墨西哥海外仓哪一家便宜:众胜盈供应链以性价比赢得跨境物流市场

在跨境电商全球化浪潮中,墨西哥作为拉美第二大电商市场,其2025年线上零售规模预计突破400亿美元,跨境订单占比高达35%。中国卖家凭借供应链优势占据墨西哥跨境市场35%的份额,但物流成本高、时效不稳定、清关风险大…

习题解析之:素数求和

习题解析之:素数求和【问题描述】 输入一个正整数n,统计从[0,n]之间的最大的10个素数之和。本题保证测试用例至少有10个满足条件的素数。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬…

【梦境审查】前后缀的使用

如题可以知道,我们会随机更改某一个节点的值,同时我们需要计算在该路径全程的能量最低点(谷底);我们又发现,该节点的值的改变,只会影响该节点往后的谷底(谷底需要减去b[i]),前驱节点的谷底不受影响,因此我们…

2025墨西哥海外仓全方位评测:十大物流企业深度解析

随着跨境电商的蓬勃发展,物流环节尤其是海外仓储服务已成为卖家们关注的核心。一个高效、稳定、可靠的海外仓不仅能大幅提升物流时效,还能降低运营成本、优化终端客户体验,进而显著增强卖家的市场竞争力。在众多提供…

2025年11月最新最全的AI搜索优化公司与GEO优化公司排行榜:7家国内头部Top级GEO服务商深度解析与AIEO推荐指南

在生成式 AI 改写搜索规则的 2025 年,企业在 DeepSeek、豆包等 AI 搜索里“被怎样回答”,已经直接影响到获客与品牌认知。中国信通院最新《生成式引擎优化产业白皮书》指出,GEO(生成式引擎优化)正在从“尝试性预算…

T701795 平衡

二分答案树形动规考虑先二分答案。那么我们只需要判断对于每一个子树内都不存在颜色个数大于二分 \(m\) 的边即可。我们发现不关心具体颜色值,只关心个数。我们设 \(f(u,j)\) 表示对于当前子树 \(u\),其孩子与 \(u\)…

日志重定向:让 qDebug() 实时显示在 Qt 窗口中

效果源码#include "mainwindow.h" // 包含主窗口头文件 #include <QApplication> // 包含 QApplication #include <QTextEdit> // 包含 QTextEdit,用于显示日志 #include <QScrollBar>…

铝单板厂家哪家好?河南霖锋幕墙用品质与实力给出答案

铝单板厂家哪家好?河南霖锋幕墙用品质与实力给出答案在建筑装饰材料领域,铝单板凭借其轻质、耐用、美观且可定制化的优势,成为众多建筑项目的优选。面对市场上琳琅满目的铝单板厂家,“铝单板厂家哪家好?” 成为采…

2025 河南网站建设权威榜单:三大本土服务商

2025 河南网站建设权威榜单:三大本土服务商2025 年河南数字经济规模持续扩容,河南郑州作为中原经济区核心增长极,企业网站建设与短视频运营需求爆发。数据显示,河南 83% 的规上企业亟需专业的网站建设、网页设计及…

2025 河南网站建设公司推荐 3 家口碑好的网站制作公司

2025 河南网站建设公司推荐 3 家口碑好的网站制作公司2025 年数字化营销竞争加剧,选对口碑与实力兼具的网站建设公司,是企业打造线上形象、实现高效获客的关键。河南作为中原互联网核心城市,孕育了多家优质服务商,…