在编程中,我们可能需要在某个条件为真时多次运行一段代码。而循环语句则用于重复一组指令。这组指令的执行取决于特定的条件。
在 Java 中,有三种不同形式的循环,它们的工作方式相同但是它们的语法有所不同。
- while 循环
- do-while 循环
- for 循环(还有一种增强的for循环,即foreach循环本小节暂不考虑)
23.1 while循环
while循环是看起来语法最为简单的循环,通常用于循环次数不确定的场景,流程如下:

其语法如下:
while(布尔表达式){
循环体语句;
}
布尔表达式作为条件,用于控制是否执行循环体语句
循环体语句用于循环重复执行的代码,如果只有一条语句,则大括号可省
当程序执行到 while 循环时,首先判断条件是否成立,即while后小括号中布尔表达式的值是否为true,如果为 true 就执行循环体语句,执行时如果没有特殊情况退出循环的话,会执行代码块直至完成,然后继续回到while后进行布尔表达式的运算,如果结果仍然是true,继续进行循环体语句的执行;否则将终止循环语句。
这里需要理解,如果每次循环都要运算表示条件的布尔表达式的值,而它的值永远都是 true,那么循环将无限执行下去,形成死循环,在实际开发中,大部分场景使用的循环是要能结束的。这样的话,布尔表达式中的变量应该在每次循环执行时有所变化,才能在某次循环后,其值变为 false。
案例:控制台输出1-100之间的整数
int i = 1; // 声明整型变量 i,赋初始值为1
while (i <= 100) { // 判断 i是否小于或等于100
System.out.println(i); // 输出 i
i++; // i 自增
}
上面的代码片段中第1行声明了整型变量 i,赋初始值为1,这属于循环的初始化,但是它不属于循环语法的一部分;接着进入 while 循环的条件判断,布尔表达式 i <= 100 此时成立,所以进入第3行,输出 i 的值 1,接着执行第4行,对 i 进行自增,此时i的值为2。执行完这两句代码之后,程序会继续回到第2行,再次对 i <= 100 进行运算,虽然 i 的值从1变为了2 ,但此时 i <= 100 的结果仍然是true,所以继续执行循环体,依次类推,当 i 的值变为 100 时将是最后一次循环,输出100后,i 自增变为 101,此时条件 i <= 100 就不成立了,整个while语句就结束了。
23.2 do/while循环
当需要至少执行一次代码块时,可以使用do/while循环,其流程如下:

其语法如下:
do{
循环体语句;
}while(布尔表达式);
执行流程:先执行 do 关键字后的循环体语句,然后计算 while 后小括号中布尔表达式的值,如果为 true 则继续执行 do 后的循环体语句,否则终止循环。
案例:控制台输出1-100之间的整数
int i = 1; // 声明整型变量 i,赋初始值为1
do {
System.out.println(i); // 输出 i
i++; // i 自增
} while (i <= 100); // 判断 i是否小于或等于100
还是同样的功能,此时的写法与之前有所不同,这段代码中的循环语句,从第 2 行的 do 关键字开始。首先无条件执行第 3 行和第 4 行,即先输出 i 的值,然后 i 自增,接着执行第 5 行布尔表达式的求值,如果是 true 则继续回到第 3 行输出i并执行第 4 行对 i 自增,经过不断循环执行直到 i <= 100 不成立,则整个while循环终止。
23.3 for循环
while 与 do/while 循环中,初始化代码是在循环结构之前,并不属于循环本身,而用于控制布尔表达式值的变量更新是在循环体语句中,都显得不够紧凑。
Java提供的 for 循环将初始化及变量更新以及循环体三者都放入循环结构中。

for循环的语法看起来最复杂,却是使用最频繁的。
for(初始化语句; 布尔表达式; 变量更新){
循环体语句;
}
语法结构:for后小括号中由三部分组成:
- 初始化语句:通常定义循环的初始变量及为其赋值,只运行一次
- 布尔表达式:用于控制是否执行循环体语句的条件
- 变量更新:通常是更新布尔表达式的变量的值
执行流程:先执行初始语句,然后执行条件判断,值为 true 则执行循环体语句,接着执行变量更新的语句,之后继续对布尔表达式运算,结果用于条件判断,周而复始;如果布尔表达式的值为false,则终止循环。
这里介绍一下逗号运算符,它在Java中只出现在for循环中:
for (int i = 1, j = 1; i < 100; i++, j++) {
}
在 for 循环的变量更新部分出现了:i++, j++ 中间就是逗号运算符。我们了解下就可以。
23.4 嵌套结构
至此,我们已经学习了条件语句和循环语句的使用语法。在实际开发中,遇到较为复杂的逻辑,也会将他们混合起来使用,比如在选择语句中执行循环操作,也可能在循环体中出现选择语句或循环语句。
这里我使用两个案例来演示一下。
案例1:计算 1-1000 之间的个位是 7 的所有整数之和
int result = 0;
for (int i = 1; i < 1000; i++) {
if (i % 10 == 7) { // 对 10 求余为 7,表示个位是 7
result += i; // 将 i 累加到 result
}
}
System.out.println(result);
上面代码结构就是典型的循环语句中使用条件语句。每循环一次就做一次条件判断,符合条件则执行设计好的逻辑、
案例2:输出九九乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + " = " + i * j + "\t");
}
System.out.println();
}
上面代码结构是在循环语句中执行循环语句,可以称为嵌套循环。外面循环称为外循环,里边循环称为内循环。
外循环每支持一次,内循环就执行一次完整的循环,且内循环就可以使用外循环中声明的变量。
23.5 死循环
死循环是没有循环次数或者不知道循环次数,自身无法终止的循环。
死循环的常见形式:
- while(true){ }:条件表达式是永远不更新的 true
- do{ }while(true); :条件表达式是永远不更新的 true
- for( ; ; ){ } :形式较多,只要每次循环条件表达式没有变化的可能,要么一次都不循环,要么就是死循环
下面演示两个 for 循环是死循环的片段
for (; ; ) {
}
for (int i = 1; i < 100; ) {
}
不过要注意的是,就算使用上面三种形式实现的死循环,在循环体里使用跳转语句也可以退出循环。
23.6 小结
本小节介绍了Java中的三种循环结构:while循环、do-while循环和for循环。while循环适用于不确定循环次数的场景;do-while循环保证至少执行一次循环体;for循环将初始化、条件判断和变量更新整合在一起,是最常用的循环结构。还讲解了循环嵌套的使用方法,以及如何避免死循环。通过计算个位为7的整数之和和输出九九乘法表两个案例,展示了循环与条件判断、循环嵌套的实际应用。

被折叠的 条评论
为什么被折叠?



