版本:基于 Java 17 & Java 21 LTS

在掌握了 Java 的基本语法后,本篇我们将深入探讨如何控制代码的执行流。现代 Java 不仅保留了经典的控制结构,还在 switch 等语句上进行了重大的现代化革新。


1. 条件判断:if-else

这是最基础的逻辑控制,用于根据布尔表达式的结果执行不同的代码块。

var score = 85;

if (score >= 90) {
    System.out.println("优秀");
} else if (score >= 60) {
    System.out.println("及合");
} else {
    System.out.println("需要努力");
}

2. 现代 Switch 表达式 (Java 14+)

传统的 switch 容易遗漏 break 导致贯穿 (fall-through)。现代 Java 引入了 Switch 表达式,它更简洁、更安全,且可以直接返回值。

2.1 传统写法 vs 现代写法

// 现代写法 (箭头语法):自动 break,且可返回值
var day = 3;
var type = switch (day) {
    case 1, 2, 3, 4, 5 -> "工作日";
    case 6, 7 -> "休息日";
    default -> throw new IllegalArgumentException("无效日期: " + day);
};

2.2 yield 关键字

如果在 switch 的某个分支中需要执行多行逻辑,可以使用代码块并配合 yield 返回值:

var result = switch (day) {
    case 1 -> {
        System.out.println("周一忙碌中...");
        yield "Monday";
    }
    default -> "Other Day";
};

3. Switch 中的模式匹配 (Java 21 LTS)

这是 Java 21 最强大的特性之一,允许 switch 根据对象的类型状态进行匹配。

Object obj = "Hello Java 21";

var message = switch (obj) {
    case Integer i -> "这是一个整数: " + i;
    case String s && s.length() > 5 -> "这是一个长字符串: " + s;
    case String s -> "这是一个短字符串";
    case null -> "它是空的";
    default -> "未知类型";
};

4. 循环语句深度解析

4.1 for 循环与增强 for

// 经典 for:适用于需要索引的场景
for (int i = 0; i < 5; i++) {
    System.out.print(i + " ");
}

// 增强 for (for-each):遍历数组或集合的首选
var fruits = new String[]{"苹果", "香蕉", "橙子"};
for (var fruit : fruits) {
    System.out.println(fruit);
}

4.2 循环标记 (Labeled Statements)

在嵌套循环中,可以使用标记来指定 breakcontinue 跳出的层级:

outer: for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        if (i == 1 && j == 1) break outer; // 直接跳出外层循环
        System.out.println(i + ", " + j);
    }
}

4.3 while 与 do-while

var count = 0;
while (count < 3) {
    System.out.println("Count: " + count++);
}

do {
    System.out.println("至少执行一次,先执行后判断");
} while (false);

5. 递归 (Recursion)

递归是方法调用自身的一种技术,常用于解决树形结构或阶乘等问题。

public static int factorial(int n) {
    if (n <= 1) return 1; // 递归出口
    return n * factorial(n - 1); // 递归调用
}

本章小结

第二篇我们深入学习了:

  1. 经典的 if-else 与现代 switch 表达式的演进。

  2. Java 21 的模式匹配与守卫条件 (&&)。

  3. 循环结构(for, while, do-while)及其高级技巧(标记)。

  4. 递归调用的基础概念。

下一篇预告:数组与集合基础 (Array, List, Set, Map)