Java仅有for、while、do-while三种标准循环,无loop/repeat;for适用于已知次数或遍历,三部分用分号分隔;while先判后执,适合条件驱动;do-while先执后判,至少执行一次;增强for简化遍历但无法改集合或获索引。

Java 中只有 for、while 和 do-while 三种标准循环结构,不存在“loop”或“repeat”这类关键字;写错语法或混淆执行时机,是初学者最常卡住的地方。
for 循环:适合已知迭代次数或遍历集合
for 循环由初始化、条件判断、更新三部分组成,全部写在括号内,用分号分隔。最容易出错的是把分号写成逗号,或者在循环体里重复修改计数器导致死循环。
常见错误现象:for (int i = 0; i (逗号应为分号);for (int i = 0; i (i 被加两次,跳过偶数)。
使用场景:
立即学习“Java免费学习笔记(深入)”;
- 遍历数组:
for (int i = 0; i - 倒序打印:
for (int i = list.size() - 1; i >= 0; i--) - 嵌套循环控制行列:
for (int row = 0; row
while 循环:适合条件驱动、次数不确定的场景
while 先判断后执行,如果初始条件不满足,循环体一次都不会运行。忘记在循环体内更新判断变量,会导致无限循环——这是调试时最常翻车的点。
典型误用:
int x = 5;
while (x > 0) {
System.out.println(x);
// 忘记写 x--;
}
适用情况:
- 读取用户输入直到输入合法:
while (!scanner.hasNextInt()) { ... } - 处理队列直到为空:
while (!queue.isEmpty()) { process(queue.poll()); } - 轮询状态变化:
while (status != READY) { checkStatus(); Thread.sleep(100); }
do-while 循环:保证至少执行一次
do-while 是唯一一个先执行、再判断的循环,结尾必须带分号。它天然适合“先做再问”的逻辑,比如菜单交互、密码重试。
容易忽略的细节:
- 条件表达式写在
}后面,不是括号里:do { ... } while (condition); - 条件中不能直接用未初始化变量:
int input; do { input = scanner.nextInt(); } while (input != 0);是安全的,但若把input声明放在while后就不合法 - 和
while性能无差异,只是语义不同;JVM 编译后字节码结构也基本一致
增强 for 循环(for-each):简化集合/数组遍历,但有局限
语法是 for (Type var : collection),底层调用 Iterator 或数组索引。它不能获取当前下标,也不能在遍历时删除元素(会抛 ConcurrentModificationException)。
不能用的场景:
- 需要修改集合本身:
for (String s : list) { list.remove(s); }→ 错误 - 需要知道索引位置:
for (int i = 0; i 才合适 - 遍历多个数组并行操作:
for (int i = 0; i 无法用 for-each 替代
安全用法示例:
Listnames = Arrays.asList("Alice", "Bob", "Charlie"); for (String name : names) { System.out.println(name.toUpperCase()); }
真正难的不是记住语法,而是判断该用哪个——关键看「是否需要下标」「是否确定执行次数」「是否允许零次执行」。很多人写完发现逻辑错,回头一看其实是选错了循环类型,而不是代码写错了。









