流程控制
约 1013 字大约 3 分钟
布欧-Lewyon
2026-05-14
本节覆盖 Java 中控制程序执行流程的主要结构:条件分支、循环、break / continue,以及现代 switch 表达式。
条件语句:if / else if / else
条件分支是程序根据布尔表达式决定是否执行某段代码的基本结构。if 后跟一个布尔表达式,为 true 时执行紧跟的代码块;可选的 else if 提供多条件链式判断;最后的 else 捕获所有前面条件都不满足的情况。
以下示例根据分数输出对应评语,演示典型的 if-else if-else 三段式:
int score = 85;
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}else if与else均为可选,链式分支从上到下匹配,进入第一个条件为true的分支后跳过其余。- 即使只有一条语句,也建议用花括号包裹,避免后续增删行时逻辑出错。
switch 语句
传统 switch
String day = "MON";
switch (day) {
case "MON":
case "TUE":
case "WED":
case "THU":
case "FRI":
System.out.println("工作日");
break;
case "SAT":
case "SUN":
System.out.println("周末");
break;
default:
System.out.println("无效");
}每个 case 末尾需要 break,否则会穿透(fall-through)到下一个 case。有意利用穿透时建议加注释说明。
现代 switch 表达式(Java 14+)
String result = switch (day) {
case "MON", "TUE", "WED", "THU", "FRI" -> "工作日";
case "SAT", "SUN" -> "周末";
default -> "无效";
};- 箭头
->右侧为表达式或块,无需break,不会穿透。 - 若需要在分支内写多条语句,使用块加
yield返回值:
String result = switch (day) {
case "MON" -> {
System.out.println("周一");
yield "开始工作";
}
case "FRI" -> "准备周末";
default -> "其他";
};- 现代
switch可作表达式(赋值给变量),编译器会检查分支是否覆盖所有可能。
循环
for 循环
for (int i = 0; i < 5; i++) {
System.out.println(i);
}初始化语句、条件、更新语句均可为空,但分号不可省略。三个部分都空时构成无限循环:for (;;)。
增强 for(for-each)
int[] numbers = {1, 2, 3, 4, 5};
for (int n : numbers) {
System.out.println(n);
}适用于数组与实现了 Iterable 的集合类。不能在循环体内修改正在遍历的集合结构(如删除元素),否则会抛出 ConcurrentModificationException。
while 与 do-while
int i = 0;
while (i < 5) {
System.out.println(i);
i++;
}
int j = 0;
do {
System.out.println(j);
j++;
} while (j < 5);while 先判断条件,可能一次都不执行;do-while 至少执行一次循环体。
break 与 continue
break:跳出当前循环(或switch)。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);
}
}标签应紧贴需跳出的循环语句,命名习惯全大写或用有意义的短名。日常开发中结构清晰的三层以内循环通常用不上标签,复杂的嵌套建议考虑提取方法替代。
小结
- 条件分支:
if/else if/else从上到下匹配首个true分支,单条语句也建议加花括号。 switch现代语法(Java 14+)用->替代break,不会穿透;需返回值的用yield。- 循环三兄弟:
for(已知次数)、while(先判断)、do-while(至少一次),增强for用于遍历数组/集合。 break跳出当前循环,continue跳过剩余进入下轮;标签控制嵌套循环的跳出层级。- 易错:增强
for遍历集合时不能修改集合结构(增/删元素),否则抛ConcurrentModificationException;遍历数组修改元素值不会抛异常但也不改变原数组元素(基本类型时)。 - 思考任务:用
for打印 1~10 的奇数,然后改用while实现相同的逻辑;再尝试用现代switch表达式把数字 1~7 转换为星期几的中文名。
上一节:基本类型与运算
下一节:方法
