Optional 是一个容器对象,用于存放非空对象。它通过“值存在”或“值不存在”来表示 null,避免了直接的空值检查。该类提供了多种实用方法,便于以函数式方式处理可能缺失的值。Optional 引入于 Java 8,类似于 Guava 库中的 Optional。 类声明 以下是 java.util.Optional<T> 类的声明: public final class Optional<T> extends Object 主要方法 序号 方法与说明 1 static <T> Optional<
Stream 核心概念 Stream 代表对象序列,支持声明式聚合操作(类似 SQL),特性: 元素序列:按需计算/获取,不存储数据。 来源:Collection、数组、I/O 通道、生成器。 聚合操作:filter/map/limit/reduce/find/match 等。 流水线:中间操作返回流,终端操作(如 collect)触发计算。 内部迭代:无需显式循环,自动利用多核(并行流)。 流创建 // Collection List list = Arrays.asList(a, b, c); Stream stream = list.stream(); // 顺
默认方法动机 Java 8 前接口仅含抽象方法与常量。为在不破坏现有实现类的前提下扩展接口(如 Collection 添加 forEach),引入 默认方法:接口中以 default 修饰、提供实现体的方法。 语法 public interface Vehicle { default void print() { System.out.println(I am a vehicle!); } } 多重默认方法冲突解决 类实现多个接口含同名默认方法时,必须显式处理: 方案 1:类中重写覆盖 public class Car implements Vehicle
函数式接口分类体系 Java 8 在 java.util.function 定义 43 个标准函数式接口,覆盖 1/2 参数、引用/原语类型、消费/供给/变换/判断/组合等场景。 核心接口速查表 分类接口抽象方法语义 消费型Consumervoid accept(T t)消费单值,无返回 BiConsumervoid accept(T t, U u)消费两值 IntConsumervoid accept(int value)消费 int LongConsumer / DoubleConsumer...消费 long/double 供给型SupplierT get()供给单值 Bool
方法引用语法 使用 :: 分隔类/对象与方法名,将方法作为值传递,替代单纯转发的 Lambda。 四大引用类型 类型语法Lambda 等价形式示例 静态方法引用ClassName::staticMethod ClassName.staticMethod(args)Integer::parseInt 实例方法引用(特定对象)instance::method instance.method(args)System.out::println 实例方法引用(任意对象)ClassName::method obj.method(args)String::compareToIgnoreCase 构
Lambda 语法 { statements; } 四大简化特性 类型可省:编译器推断参数类型, a+b → a+b。 单参数括号可省: a*2 → a*2。 单表达式大括号与 return 可省:{ return a+b; } → a+b。 隐式返回:表达式形式自动返回值。 完整示例 System.out.println(Hello + message); greet1.sayMessage(Mahesh); greet2.sayMessage(Suresh); } interface MathOperation { int
下载与安装 访问 Oracle 官网:https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html 或 OpenJDK:https://jdk.java.net/8/ 下载对应平台安装包。 环境变量配置 Windows 10/11 右键“此电脑” → “属性” → “高级系统设置” → “环境变量”。 新建系统变量 JAVA_HOME = C:\Program Files\Java\jdk1.8.0_xxx。 编辑 Path,添加 %JAVA_HOME%\bin。 Windows 7/8
Java 8 核心特性 Java 8 于 2014 年 3 月 18 日发布,是里程碑版本,引入函数式编程能力、新 JS 引擎、日期时间 API、流式处理等: 特性说明 Lambda 表达式函数式编程入口,简化匿名内部类, a+b。 方法引用:: 语法引用现有方法,如 System.out::println。 默认方法接口含实现的方法,default 关键字,兼容旧接口演进。 Stream API声明式数据处理管道,filter/map/reduce/collect,支持并行流。 Date/Time APIjava.time 包,不可变、线程安全、领域驱动设计。 Optional容器化
核心增强点 延迟与超时支持:解决 Future 无限等待问题。 改进子类化支持:允许自定义 CompletableFuture 子类保持类型一致性。 新增工厂方法:简化已完成/异常完成阶段创建。 1. 超时与延迟补全 // 在指定时间内未完成则以 value 正常完成 public CompletableFuture completeOnTimeout(T value, long timeout, TimeUnit unit) // 在指定时间内未完成则以 TimeoutException 异常完成 public CompletableFuture orTimeout(long tim
MultiResolutionImage API Java 9 引入 java.awt.image.MultiResolutionImage 接口及基础实现 BaseMultiResolutionImage,将不同分辨率的图像变体封装为单一逻辑图像,运行时自动选择最佳变体。 核心方法 Image getResolutionVariant(double destWidth, double destHeight):返回目标尺寸下最佳变体(就近匹配,不放大)。 List getResolutionVariants():返回所有变体的只读列表。 继承 Image 方法:getWidth()、get
三大新方法
1. stream()
public Stream stream()
有值返回单元素流,无值返回空流。配合 flatMap 替代 filter + map 模式。
List
背景 Java 7 引入菱形操作符 <> 简化泛型构造,但匿名内部类构造器调用不支持。Java 9 移除此限制,匿名类也可用 <> 推断类型参数。 代码对比 Java 8 写法(冗余类型参数) Handler intHandler = new Handler(1) { @Override public void handle() { System.out.println(content); } }; Handler intHandler1 = new Handler(2) { @Override public void handle() { Sys
增强动机 @Deprecated 自 Java 5 起存在,但仅标记“不推荐使用”,未区分“将来会移除”还是“仅建议迁移”。Java 9 新增两个属性提供语义精度: forRemoval():boolean,默认 false。true 表示计划在未来版本移除,迁移紧迫性高。 since():String,默认 。标记废弃起始版本(如 9),便于工具生成迁移时间线。 注解定义 @Documented @Retention(RetentionPolicy.RUNTIME) @Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, P
改进点 Java 7 引入 try-with-resources 要求在 try(...) 括号内声明或赋值资源变量。Java 9 放宽限制:已声明的 effectively-final 变量(仅赋值一次)可直接放入 try 括号,无需重新声明别名。 代码对比 Java 7/8 写法 Reader inputString = new StringReader(message); BufferedReader br = new BufferedReader(inputString); try (BufferedReader br1 = br) { // 必须声明新变量 br1 re
新增四大方法 1. takeWhile(Predicate) 有序流:取最长前缀,直到谓词首次返回 false;无序流:取任意满足谓词的子集(实现相关)。 !s.isEmpty()) .forEach(System.out::print); // 输出: abc 2. dropWhile(Predicate) 有序流:丢弃最长前缀(谓词为 true),返回剩余元素;无序流:丢弃任意满足谓词的子集。 !s.isEmpty()) .forEach(System.out::print); // 输出: ef 3. iterate(seed, hasNext, n
核心改进 Java 9 大幅增强 java.lang.ProcessHandle,提供进程原生信息查询与控制能力,无需 JNI 或解析 ps 命令输出。 ProcessHandle 关键能力 基础信息:PID、启动时间、累计 CPU 时间、命令行、参数、用户、父进程、子进程/后代。 生命周期控制:destroy()(正常终止)、destroyForcibly()(强制杀死)、supportsNormalTermination()。 存活检查:isAlive()。 异步回调:onExit() 返回 CompletableFuture,进程退出时触发。 流式查询:ProcessHandle.a
演进脉络 版本接口可包含成员 Java 7 及之前常量、抽象方法 Java 8+ 默认方法、静态方法 Java 9+ 私有方法、私有静态方法 私有方法解决的问题 Java 8 默认方法/静态方法共享逻辑时,只能再写默认/静态方法,导致实现细节暴露在接口中。Java 9 私有方法允许将共享逻辑封装为 private,仅供接口内部默认/静态方法调用。 语法示例 interface Logging { String ORACLE = Oracle_Database; String MYSQL = MySql_Database; // 私有实例方法:供默认方法
痛点与解决 Java 8 创建不可变集合需“新建可变集合 → 添加元素 → Collections.unmodifiableXxx() 包装”三步,冗长且易错。Java 9 在 List、Set、Map 接口新增静态工厂方法,一行代码完成创建。 核心方法签名 // List & Set:0-10 个参数重载 + 可变参数重载 static List of(E e1, E e2, ...) static List of(E... elements) // Map:0-10 对键值对重载 + Map.Entry 可变参数 static Map of(K k1, V v1, K k2, V
多版本 JAR 概念 Java 9 增强 JAR 格式:META-INF/MANIFEST.MF 主属性添加 Multi-Release: true,META-INF/versions/ 目录下按主版本号存放版本专用类/资源(如 versions/9/、versions/10/)。 运行时 JVM 自动选择匹配最高兼容版本的类:Java 9 运行时优先加载 versions/9/ 下的类,Java 8 则回退到根目录类。 实战步骤 1. 准备 Java 7 版本类 # c:/test/java7/com/tutorialspoint/Tester.java package com.tuto
HTML5 文档生成 Java 9 之前 javadoc 生成 HTML 4.0 格式文档。Java 9 新增 -html5 选项生成现代 HTML5 文档,并内置搜索框,大幅提升 API 查阅体验。 对比演示 旧版生成 (JDK 7) javadoc -d C:/JAVA Tester.java # 生成传统框架式文档,无搜索功能 新版生成 (JDK 9+) javadoc -d C:/JAVA -html5 Tester.java # 生成 HTML5 文档,包含搜索索引、响应式布局 示例源码 /** * @author MahKumar * @version 0.1
java