亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

Java 8 速查手册:核心新特性、语法、API 与最佳实践一站式参考

Java 8 概览

Java 8 于 2014 年 3 月 18 日发布,是 Java 发展史上里程碑式的版本。它引入了函数式编程支持、全新 Stream API、日期时间 API、Optional、Nashorn 引擎、默认方法等特性,极大提升了开发效率与代码表达力。

核心新特性

Lambda 表达式

语法

(parameters) -> expression
(parameters) -> { statements; }

特点

示例:四则运算与问候

public class Java8Tester {
    interface MathOp { int op(int a, int b); }
    interface Greeting { void say(String msg); }

    private int operate(int a, int b, MathOp op) { return op.op(a, b); }

    public static void main(String[] args) {
        Java8Tester t = new Java8Tester();

        MathOp add = (a, b) -> a + b;
        MathOp sub = (a, b) -> a - b;
        MathOp mul = (a, b) -> { return a * b; };
        MathOp div = (a, b) -> a / b;

        System.out.println("10 + 5 = " + t.operate(10, 5, add));
        System.out.println("10 - 5 = " + t.operate(10, 5, sub));
        System.out.println("10 * 5 = " + t.operate(10, 5, mul));
        System.out.println("10 / 5 = " + t.operate(10, 5, div));

        Greeting g1 = msg -> System.out.println("Hello " + msg);
        Greeting g2 = (msg) -> System.out.println("Hello " + msg);
        g1.say("Mahesh");
        g2.say("Suresh");
    }
}

输出

10 + 5 = 15
10 - 5 = 5
10 * 5 = 50
10 / 5 = 2
Hello Mahesh
Hello Suresh

变量作用域

Lambda 只能引用 final 或“效果上 final”(仅赋值一次)的局部变量。

方法引用

四种形式:

List names = Arrays.asList("Mahesh", "Suresh", "Ramesh");
names.forEach(System.out::println); // 静态方法引用

函数式接口

仅包含一个抽象方法的接口,可隐式转换为 Lambda。Java 8 在 java.util.function 包提供 40+ 标准函数式接口,常用包括:

接口参数返回用途
Predicate<T>Tboolean条件判断
Function<T,R>TR转换映射
Consumer<T>Tvoid消费操作
Supplier<T>无T供给值
UnaryOperator<T>TT一元运算
BinaryOperator<T>(T,T)T二元运算

Predicate 示例

List list = Arrays.asList(1,2,3,4,5,6,7,8,9);
eval(list, n -> true);           // 全部
eval(list, n -> n % 2 == 0);     // 偶数
eval(list, n -> n > 3);          // 大于 3

static void eval(List list, Predicate p) {
    for (Integer n : list) if (p.test(n)) System.out.print(n + " ");
}

默认方法

接口中用 default 关键字定义实现,实现类可继承或覆盖。解决多接口默认方法冲突的两种方式:

  1. 在实现类中显式重写
  2. 用 InterfaceName.super.method() 显式调用指定接口的默认实现

接口还可定义 static 静态辅助方法。

Stream API

Stream 代表元素序列,支持聚合操作(filter、map、reduce 等),具有:

常用操作速查

操作类型说明
filter中间按条件过滤
map中间元素转换
flatMap中间扁平化映射
distinct中间去重
sorted中间排序
limit/skip中间截取/跳过
forEach终端遍历消费
collect终端归约收集(toList, joining 等)
reduce终端聚合计算
count/min/max终端统计
anyMatch/allMatch/noneMatch终端匹配判断
findFirst/findAny终端查找

Collectors 工具

// 收集为 List
List filtered = list.stream().filter(s -> !s.isEmpty()).collect(Collectors.toList());
// 字符串拼接
String joined = list.stream().filter(s -> !s.isEmpty()).collect(Collectors.joining(", "));
// 统计摘要
IntSummaryStatistics stats = numbers.stream().mapToInt(x -> x).summaryStatistics();

并行流

long count = list.parallelStream().filter(s -> s.isEmpty()).count();

Optional 类

核心方法:of、ofNullable、empty、isPresent、ifPresent、get、orElse、orElseGet、orElseThrow、filter、map、flatMap。

最佳实践:避免直接调用 get(),优先用 orElse/orElseGet/ifPresent。

Nashorn JavaScript

日期时间 API (java.time)

旧 API 互转:Date.toInstant() → LocalDateTime.ofInstant(instant, zone) / ZonedDateTime.ofInstant(...)。

Base64

// 标准
Base64.getEncoder().encodeToString(bytes);
Base64.getDecoder().decode(str);

// URL 安全
Base64.getUrlEncoder().encodeToString(bytes);
Base64.getUrlDecoder().decode(str);

// MIME(自动分行)
Base64.getMimeEncoder().encodeToString(bytes);
Base64.getMimeDecoder().decode(str);

环境搭建

  1. 从 Oracle 官网下载 JDK 8 安装包
  2. 运行安装程序
  3. 配置环境变量 JAVA_HOME 与 PATH
  4. 推荐 IDE:IntelliJ IDEA、Eclipse、NetBeans、VS Code

java

  1. 掌握预防性与状态基础维护:PM开发实用指南
  2. 方管弯曲机专家指南:原理、结构与选型
  3. 冷镦/冷压成型机完全指南:原理、分类与优势
  4. 行星减速机深度解析:紧凑结构下的大扭矩输出
  5. Jet钻铣床终极专业指南:结构、优势与应用全解析
  6. 伺服冲压机深度解析:工作原理、类型与超越机械冲床的优势
  7. 气动缸专业指南:快速响应与可靠驱动的自动化核心组件
  8. 齿轮开卷机详解:功能优势、结构构造与工作流程
  9. CNC车床轴向速览:9轴运动详解
  10. 守护供应链:全方位保险策略指南
  11. CNC铣削实操精要:专业操作员快速参考指南
  12. 深入理解 Java Vector:用法、特性及与 ArrayList 的对比

类用途
LocalDate / LocalTime / LocalDateTime无时区日期/时间/日期时间
ZonedDateTime / ZoneId带时区日期时间
Period / Duration日期间隔 / 时间间隔
ChronoUnit时间单位枚举
TemporalAdjusters复杂日期调整(如“下个工作日”)