流程控制概述
本教程共 100 篇 · 第 18 篇 · 更新于 2026-08-05 · 约 6 分钟阅读
18. 流程控制概述
本节目标:搞懂程序为什么不能只会”从上往下念”,认识顺序、分支、循环三大结构,以及后面几章要逐个拆解的 if、switch、while、for、break、continue 都是干什么用的。
写第一个 Hello World 时,代码只有几行,JVM 从上到下依次执行,跑完就结束。这种”一条道走到黑”的写法叫顺序结构,也是程序最底层的默认行为。
可真实世界没这么简单。你登录一个 App,输完密码要点”登录”,系统得先判断密码对不对:对了进首页,错了提示重试。再比如要统计全班 50 人的成绩,难道把打印语句抄 50 遍?当然要”反复做同一件事”。
这些”根据情况走不同路""重复做同一件事”的需求,靠顺序结构做不到,必须靠流程控制。
三种基本结构
流程控制说到底就是三种结构的组合,记住它们你就不慌了。
第一是顺序结构:语句一条接一条执行,前面已经说过,是默认形态。
第二是分支结构(也叫选择结构):程序在岔路口做判断,条件成立走左边,不成立走右边。Java 里实现分支的有 if 和 switch 两种,下一章、下下章会细讲。
第三是循环结构:把一段代码反复执行,直到满足退出条件。Java 提供 while、do-while、for 三种循环,分别适合不同场景。
Note顺序、分支、循环是任何编程语言都有的”三件套”。学透了这三类,你就能把脑子里任意复杂的逻辑翻译成代码。
三种结构对照表
| 结构 | 解决什么问题 | Java 关键字 | 执行特点 | 对应章节 |
|---|---|---|---|---|
| 顺序 | 按写的顺序一步步做 | 无(默认行为) | 每条语句执行且只执行一次 | 本章之前全部 |
| 分支 | 按条件选一条路走 | if / else / switch | 多条路里只走中一条 | 第 19、20 章 |
| 循环 | 同一段逻辑重复做 | while / do-while / for | 同一段代码执行 0 到 N 次 | 第 21、22 章 |
| 跳转 | 提前结束或跳过某轮 | break / continue / return | 打断上面三种的正常流向 | 第 23 章 |
跳转严格说不算”基本结构”,它是配合循环和分支用的调节阀,所以单列一行。
看这张表时抓住一个差别:分支的每个出口最多走一次,循环的同一个出口可能走很多次。想不清该用哪个,就问自己”这段代码要不要重复做”。
岔路口:分支结构
分支让程序有了”判断力”。最简单的是 if:
int score = 75;
if (score >= 60) {
System.out.println("及格");
}
```bash
上面这行意思是:分数大于等于 60 时,才打印"及格"。条件不满足,那对花括号里的内容就直接跳过。
当分支不止一个选项时,可以用 `if` 串起多个 `else if`,也可以用 `switch` 做"多路选择"。比如根据星期几输出不同的安排,`switch` 写起来比一堆 `if` 更清爽。这两类分支后面会用两章专门展开。
## 转圈圈:循环结构
循环解决的是"重复劳动"。假设要打印 1 到 10:
```java
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
三行代码就把十次打印干完了。循环里有三要素:从哪开始(i = 1)、到哪结束(i <= 10)、每次怎么变(i++)。把这三件事交代清楚,循环就能稳稳跑完。
while 则更适合”不知道要转几圈,但知道什么条件下停”的场景,比如读取用户输入直到对方输入 exit。
急刹车与跳一步:控制跳转
光有分支和循环还不够。有时候循环跑到一半,条件满足了想立刻停下,用 break。有时候只是想跳过这一轮、进入下一轮,用 continue。
举个生活例子:你挨个检查一筐苹果,break 相当于”找到坏的立刻关筐走人”,continue 相当于”这个坏了跳过,继续看下一个”。这两个工具后续也会单独成章。
本章是张地图
这一章不咬细节,先让你知道工具箱里有哪些家伙:顺序、分支、循环三大结构,再加上 break、continue 这两个控制跳转的命令。
后面的章节会一件一件拆开讲:第 19 章 if-else、第 20 章 switch、第 21 章 while 与 do-while、第 22 章 for、第 23 章 break 与 continue。建议顺着顺序读,每章配了能直接跑的代码,照着敲一遍比看十遍更管用。
这条路线不是随便排的。if 是所有判断的地基,学完它再看 switch,才明白 switch 只是”多路相等匹配”的专用简写。循环放在分支后面,是因为循环的退出条件本身就是一次判断——不会写条件,就写不好循环。break 和 continue 压轴,因为它们得先有循环才有意义。
Tip初学者常犯的错,是把所有逻辑都堆进一层层的
if里。等你学过循环和数组,会发现很多”抄很多遍”的代码都能被循环收编。先建立结构意识,后面写代码会轻松一大截。
动手练一练
打开编辑器,写一个小程序模拟”过红绿灯”:用顺序结构打印”红灯停”,用分支判断当前灯色决定”走”还是”等”,用循环模拟连续经过 5 个路口。写完跑一遍,观察输出顺序,确认三大结构各司其职。
Tip练习时故意把循环的结束条件写错(比如
i <= 0),看看会不会死循环或一次都不跑。亲手触发错误,比背规则记得牢。
易错提醒
初学者常把”流程控制”理解成”只有 if 和 for 才叫控制”。其实 break、return、甚至方法调用本身都在改变程序的执行流向。脑子里始终装着那张地图:顺序打底,分支分叉,循环转圈,跳转急停。遇到复杂逻辑,先画小流程图,再翻成代码,会顺畅很多。
常见疑问
Q:Java 里的条件必须是布尔值吗?
必须。if 括号里只能放 true 或 false,不认”非零即真”那一套。写 if (count) 直接编译不过:
error: incompatible types: int cannot be converted to boolean
```java
C 语言背景的读者最容易在这卡壳,改成 `if (count != 0)` 就对了。
**Q:分支和循环能互相嵌套吗?**
能,而且实际代码里到处都是。循环里套 `if` 做筛选、`if` 里套循环做批量处理,都很常见。只是嵌套层数别超过三层,太深就该拆成方法了。
**Q:`goto` 呢?**
Java 把 `goto` 列为保留字,但没有实现,不能用。需要跨层跳出多重循环时,用第 23 章讲的带标签 `break`,效果可控得多。