Java 中的流程控制语句用于控制程序的执行流程,根据条件或循环来决定代码的执行方式。
Java 提供了几种常用的流程控制语句,包括条件语句和循环语句。
if
语句:用于根据条件执行不同的代码块。if-else
语句:在条件为真时执行一个代码块,否则执行另一个代码块。if-else if-else
语句:在多个条件之间进行选择,根据不同的条件执行不同的代码块。switch
语句:根据表达式的值选择不同的分支执行代码块。for
循环:用于重复执行一段代码,可以指定循环的初始值、条件和每次迭代的操作。foreach
循环:用于遍历数组或集合中的元素,简化了遍历的过程。while
循环:在满足条件的情况下重复执行一段代码,条件在循环体之前判断。do-while
循环:在满足条件的情况下重复执行一段代码,条件在循环体之后判断,至少会执行一次循环体。break
语句:用于终止循环或 switch
语句的执行,并跳出当前代码块。
continue
语句:用于终止本次循环的执行,并继续下一次循环的迭代。
return
语句:用于退出当前方法的执行,并返回到调用方法的地方。
要跳出多重循环(即在内层循环中跳出外层循环),可以使用标签(label)和 break 语句的结合来实现。
语法:
if (condition) {
// 当条件为真时执行的代码块
}
如果条件 condition 为真,则执行代码块中的语句;否则跳过该代码块。
语法:
if (condition) {
// 当条件为真时执行的代码块
} else {
// 当条件为假时执行的代码块
}
如果条件 condition 为真,则执行第一个代码块;否则执行 else 代码块。
语法:
if (condition1) {
// 当条件1为真时执行的代码块
} else if (condition2) {
// 当条件2为真时执行的代码块
} else {
// 当条件1和条件2都为假时执行的代码块
}
根据条件的顺序依次判断,执行第一个为真的条件对应的代码块;如果所有条件都为假,则执行 else 代码块。
注意:每个条件语句只会执行与其匹配的第一个代码块,即使后续的条件也满足。条件表达式的结果必须是一个布尔值(true 或 false)。
switch用于根据表达式的值选择不同的执行路径。
语法:
switch (表达式) {
case 值1:
// 当表达式的值等于值1时执行的代码
break;
case 值2:
// 当表达式的值等于值2时执行的代码
break;
case 值3:
// 当表达式的值等于值3时执行的代码
break;
// 可以有更多的 case 分支
default:
// 当表达式的值与所有的 case 值都不匹配时执行的代码
break;
}
switch 语句中的表达式可以是整数类型(byte、short、int 或 char)及其包装类型(Byte、Short、Integer、Character)、枚举类型或字符串类型(从 Java 7 开始支持)。
case 分支用于指定当表达式的值与某个值相等时要执行的代码块。每个 case 分支后面必须使用 break 语句来跳出 switch 语句,否则程序将会继续执行后续的 case 分支代码。如果没有匹配的 case 分支,可以使用 default 分支来执行默认的代码块。
需要注意的是,switch 语句只能对某个表达式的值进行匹配,而不能用于范围判断或布尔表达式。每个 case 分支中的值必须是常量或字面量,而不能是变量或表达式。
语法:
for (initialization; condition; update) {
// 循环体代码
}
在上述语法中,initialization 是循环的初始条件,用于初始化循环控制变量;condition 是循环的条件,只有当条件为 true 时,循环才会执行;update 是循环控制变量的更新操作,它会在每次循环迭代完成后执行。
执行过程如下:
①执行 initialization 初始化循环控制变量。
②检查 condition 的值,如果为 true,执行循环体内的代码;如果为 false,跳过循环体,继续执行下一条语句。
③执行循环体内的代码。
④执行 update 更新循环控制变量。
⑤回到第 2 步,继续判断条件,重复执行上述步骤。
例子:
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
foreach 循环,也称为增强型 for 循环,是 Java 中用于遍历数组或集合的一种循环控制语句。它提供了一种简化的语法,可以更方便地遍历集合中的元素,无需手动管理循环索引。
语法:
for (elementDataType elementVariable : collection) {
// 循环体代码
}
在上述语法中,elementDataType 是集合元素的数据类型,elementVariable 是每次循环迭代时用于表示当前元素的变量名,collection 是要遍历的数组或集合。
执行过程如下:
①依次取出集合中的每个元素,并将其赋值给 elementVariable。
②执行循环体内的代码。
③回到第 1 步,继续取出下一个元素,重复执行上述步骤。
④当集合中的所有元素都被遍历完毕后,循环终止。
需要注意的是,foreach 循环只能用于遍历数组和实现了 Iterable 接口的集合类(如 List、Set 等),不能用于遍历其他类型的数据结构。
例子:
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
System.out.println(num);
}
在上述示例中,numbers 是一个整型数组,foreach 循环遍历了数组中的每个元素,并将其赋值给 num 变量,然后在循环体中打印出每个元素的值。
语法:
while (condition) {
// 循环体代码
}
在上述语法中,condition 是一个布尔表达式,用于判断循环是否继续执行。只有当 condition 的值为 true 时,循环体中的代码块才会被执行。当 condition 的值为 false 时,循环终止,程序继续执行循环之后的代码。
condition 可以是任何返回布尔值的表达式,例如比较表达式、逻辑运算表达式等。
需要注意的是,在使用 while 循环时,要确保循环条件最终能够为 false,以避免进入无限循环的情况。
例子:
int i = 1;
while (i <= 5) {
System.out.println(i);
i++;
}
在上述示例中,循环体中的代码会打印出数字 1 到 5。循环的条件是 i <= 5,只有当 i 的值小于等于 5 时,循环会一直执行。每次循环迭代完成后,i 的值会递增一次,直到 i 的值大于 5,循环终止。
与 while 语句不同的是,do-while 语句先执行一次循环体,然后再检查循环条件。如果循环条件为真,则继续执行循环,否则循环终止。
语法:
do {
// 循环体代码
} while (condition);
在上述语法中,condition 是一个布尔表达式,用于判断循环是否继续执行。当 condition 的值为 true 时,循环会继续执行;当 condition 的值为 false 时,循环终止。
需要注意的是,无论循环条件是否满足,do-while 循环至少会执行一次循环体。因此,do-while 循环适用于那些需要至少执行一次的情况。
与 while 循环类似,使用 do-while 循环时,同样要确保循环条件最终能够为 false,以避免进入无限循环的情况。
例子:
int i = 1;
do {
System.out.println(i);
i++;
} while (i <= 5);
在上述示例中,循环体中的代码会打印出数字 1 到 5。首先,循环体会被执行一次,然后在每次循环迭代完成后,会检查 i 的值是否小于等于 5。只有当 i 的值满足条件时,循环会继续执行;否则循环终止。
标签(label)和 break 语句结合跳出多重循环
例子:
outerLoop:
for (int i = 1; i <= 3; i++) {
System.out.println("Outer loop: " + i);
innerLoop:
for (int j = 1; j <= 3; j++) {
System.out.println("Inner loop: " + j);
if (i == 2 && j == 2) {
break outerLoop; // 在满足条件时跳出外层循环
}
}
}
在上述代码中,我们使用了 outerLoop 标签来标记外层循环,然后在内层循环中通过 break outerLoop; 语句来跳出外层循环。当 i 等于 2 且 j 等于 2 时,跳出外层循环,程序将不再执行后续的循环迭代。