while 循环
while 循环是先判断,后执行的循环,在每次循环开始之前,它会先检查布尔表达式的值,如果表达式为 true,则执行循环体;如果为 false,则跳过整个循环,继续执行循环体后面的代码。

语法结构
while (布尔表达式) {
// 循环体
// 当布尔表达式为 true 时,要重复执行的代码
}
执行流程
- 计算
while后面的布尔表达式。 - 如果表达式结果为
true:- 执行
while循环大括号 内的代码块(循环体)。 - 执行完循环体后,返回第 1 步,再次判断布尔表达式。
- 执行
- 如果表达式结果为
false:- 跳过
while循环,继续执行循环体后面的代码。
- 跳过
特点
- 入口条件判断:循环体可能一次都不会被执行,因为条件在执行前就进行判断。
- 适用于在不确定循环次数,但知道循环开始条件的情况下使用。
示例
示例 1:经典的计数器
public class WhileLoopExample {
public static void main(String[] args) {
int count = 1; // 初始化计数器
System.out.println("--- while 循环开始 ---");
while (count <= 5) { // 循环条件:只要 count 小于等于 5
System.out.println("当前计数: " + count);
count++; // 重要:更新计数器,否则会变成死循环
}
System.out.println("--- while 循环结束 ---");
System.out.println("循环结束后的 count 值: " + count);
}
}
输出结果:
--- while 循环开始 ---
当前计数: 1
当前计数: 2
当前计数: 3
当前计数: 4
当前计数: 5
--- while 循环结束 ---
循环结束后的 count 值: 6
示例 2:循环体一次都不执行
public class WhileLoopNotExecuted {
public static void main(String[] args) {
int number = 10;
// 条件从一开始就是 false
while (number < 5) {
System.out.println("这行代码不会打印出来。");
number++;
}
System.out.println("因为条件不满足,所以直接跳过了 while 循环。");
}
}
do-while 循环
do-while 循环是先执行,后判断的循环,它会无条件地执行一次循环体,然后再检查布尔表达式的值,如果表达式为 true,则继续循环;如果为 false,则结束循环。

语法结构
do {
// 循环体
// 至少会执行一次的代码
} while (布尔表达式); // 注意:这里的分号 ; 不能省略!
执行流程
- 无条件执行
do后面大括号 内的代码块(循环体)。 - 执行完循环体后,计算
while后面的布尔表达式。 - 如果表达式结果为
true:返回第 1 步,再次执行循环体。
- 如果表达式结果为
false:- 结束
do-while循环,继续执行循环体后面的代码。
- 结束
特点
- 出口条件判断:循环体至少会执行一次,无论初始条件是否满足。
- 适用于需要先执行一次操作,然后再根据条件判断是否继续重复的场景。
示例
示例 1:经典的计数器
public class DoWhileLoopExample {
public static void main(String[] args) {
int count = 1; // 初始化计数器
System.out.println("--- do-while 循环开始 ---");
do {
System.out.println("当前计数: " + count);
count++; // 更新计数器
} while (count <= 5); // 循环条件
System.out.println("--- do-while 循环结束 ---");
System.out.println("循环结束后的 count 值: " + count);
}
}
输出结果:
--- do-while 循环开始 ---
当前计数: 1
当前计数: 2
当前计数: 3
当前计数: 4
当前计数: 5
--- do-while 循环结束 ---
循环结束后的 count 值: 6
示例 2:循环体至少执行一次

public class DoWhileAlwaysExecuted {
public static void main(String[] args) {
int number = 10;
// 条件从一开始就是 false
do {
System.out.println("这行代码依然会打印出来,因为 do-while 至少执行一次。");
number++;
} while (number < 5); // 循环条件不满足,但循环已经执行过了
System.out.println("循环结束后的 number 值: " + number);
}
}
输出结果:
这行代码依然会打印出来,因为 do-while 至少执行一次。
循环结束后的 number 值: 11
while 与 do-while 的核心区别
| 特性 | while 循环 |
do-while 循环 |
|---|---|---|
| 执行顺序 | 先判断,后执行 | 先执行,后判断 |
| 执行次数 | 循环体可能执行 0 次 | 循环体至少执行 1 次 |
| 语法 | while (condition) { ... } |
do { ... } while (condition); |
| 适用场景 | 当循环的前提条件不满足时,不应该执行任何操作。 | 当循环的操作需要至少执行一次,然后再决定是否继续。 |
循环中的常见问题:死循环
死循环是指一个循环的终止条件永远无法达到,导致程序无限循环下去,无法继续执行后面的代码。
while 死循环示例
// 这是一个死循环!
int i = 1;
while (i <= 10) {
System.out.println("Hello");
// 忘记了 i++,i 的值永远是 1,条件永远为 true
}
如何避免死循环
- 确保循环变量被正确更新:在循环体内,必须有能够改变布尔表达式结果的代码,最常见的就是计数器的递增/递减(如
i++,count--)。 - 确保循环有明确的出口:布尔表达式最终必须有变为
false的可能性。
与 for 循环的简单对比
Java 中还有一种非常常用的循环——for 循环。for 循环通常用于当你确切地知道循环需要执行多少次时。
// for 循环语法
for (初始化; 布尔表达式; 更新) {
// 循环体
}
// 示例:从 1 打印到 5
for (int i = 1; i <= 5; i++) {
System.out.println("当前 i 的值: " + i);
}
for 循环 vs while 循环:
for循环:将初始化、条件判断、变量更新这三个部分都放在一行代码中,结构更紧凑,适合用于固定次数的循环。while循环:结构更灵活,循环变量的初始化可以在循环外,循环条件的判断逻辑可以更复杂,适合用于循环次数不确定的场景。
| 循环类型 | 何时使用 |
|---|---|
while |
当你需要在循环开始前检查一个条件,并且这个条件可能从一开始就不满足(即循环体可能一次都不执行)。 |
do-while |
当你需要确保循环体中的代码至少执行一次,然后再根据条件判断是否继续。 |
for |
当你确切地知道循环需要执行的次数,或者希望将循环的控制(初始化、条件、更新)集中在一起时。 |
理解这三种循环的区别和适用场景,是掌握 Java 流程控制的关键一步。
