版本:基于 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)
在嵌套循环中,可以使用标记来指定 break 或 continue 跳出的层级:
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); // 递归调用
}本章小结
第二篇我们深入学习了:
经典的
if-else与现代switch表达式的演进。Java 21 的模式匹配与守卫条件 (
&&)。循环结构(for, while, do-while)及其高级技巧(标记)。
递归调用的基础概念。
下一篇预告:数组与集合基础 (Array, List, Set, Map)