钩子
给你个任务:打印 1 到 100。
复制 100 行 System.out.println 也行,就是交完这份代码,你可能会被自己劝退。而循环只要 3 行:
for (int i = 1; i <= 100; i++) {
System.out.println(i);
}
循环是程序第一次"自己干活"。前面学的 if-else 让程序会"选择",循环让程序会"重复"——加上这两个,程序才算有了脑子和小腿。
01 for:把执行顺序拆开看
for (int i = 1; i <= 100; i++) 这行看着挤,其实是三段:
- 初始化:
int i = 1,只执行一次 - 条件:
i <= 100,每轮开始前检查,不满足就停 - 更新:
i++,每轮循环体执行完后才跑
顺序是:初始化 → 条件 → 循环体 → 更新 → 条件 → 循环体 → 更新……更新是在循环体之后,这个顺序搞反了,很多现象就解释不了。

02 while 和 do-while:先看门 vs 先进门
while 更简单,只有条件:
int n = 100;
while (n > 0) {
System.out.println(n);
n--;
}
注意 n-- 必须有——忘了更新条件变量,循环永远停不下来,这就是死循环,CPU 直接拉满。
do-while 是变种:先执行一次循环体,再判断条件。"先看门再进门"和"先进门再看门"的区别:
do {
System.out.println("至少执行一次");
} while (false);
条件是 false 也照样跑了一遍。用它的情况不多,但读到别人的代码得认识它——比如"先让用户输入,再检查输入对不对"。
03 break 和 continue:紧急出口和跳过本轮

for (int i = 1; i <= 10; i++) {
if (i == 5) {
break; // 整个循环到此结束
}
if (i % 2 == 0) {
continue; // 跳过本轮,直接进下一轮
}
System.out.println(i);
}
输出:1、3。到 5 直接 break 整个循环终止;偶数被 continue 跳过不打印。break 是紧急出口,continue 是跳过本轮,别混。
04 for 和 while 怎么选 + 两个坑
一句话:知道循环几次,用 for;不知道几次、只知道条件,用 while。 打印 1 到 100 用 for;"一直读用户输入直到输入 quit"用 while。
顺便回答标题那个问题:while (true) 不是 bug,是服务器的日常——服务器就是个巨大的死循环,等请求、处理、再等。退出靠的是 break 或异常,不是条件变 false。
两个新手高频坑:
坑 1:边界差一(off-by-one)。i < 100 打印 99 个数,i <= 100 打印 100 个。写完循环先问自己:第一轮 i 是几?最后一轮 i 是几?
坑 2:在循环体里改循环变量。for 循环里手滑写个 i++,一轮走两步,结果对不上还找不到原因。循环变量只归 for 括号管。
本文示例代码均已本地实测通过,可直接运行。
对应文件:LoopDemo.java
橙码酱,分享更有用的技术知识,助你成为更优秀的开发者。