在大多数高级编程语言中,包括Java在内,流程控制结构主要分为三种:顺序结构、选择结构和循环结构。这些结构是程序逻辑构建的基础。
顺序结构是指代码按照从上到下的顺序依次执行,这是程序运行的默认方式,无需额外控制语句干预。因此,关于顺序结构的理解相对直观,不需要过多解释。
[此处为图片1]
选择结构则允许程序根据不同的条件执行不同的代码块,主要包括两种形式:if 条件判断和 switch 分支选择。
if 条件选择
if 语句可以根据条件的真假来决定是否执行某段代码。它有几种常见的写法:单纯的 if、if-else 配合使用,以及 if-else if-else 的多条件判断结构。
在纯 if 结构中,只有当括号内的条件为 true 时,才会执行对应的代码块;否则跳过该部分。例如,在以下代码中,由于 a > b 不成立(即值为 false),所以不会输出“a大于b”这句话。之后程序继续按顺序执行下一条打印语句。
public class Demo5 {
public static void main(String[] args) {
int a = 10;
int b = 20;
if (a > b) {
System.out.println("a大于b");
}
System.out.println("程序结束");
}
}
而在 if-else 结构中,若条件满足,则执行 if 对应的代码块;否则执行 else 中的内容。比如下面的例子中,因为 a >= b 为 false,因此会进入 else 分支,输出“a小于b”,随后继续执行后续的顺序语句。
public class Demo6 {
public static void main(String[] args) {
int a = 10;
int b = 20;
if (a >= b) {
System.out.println("a大于等于b");
} else {
System.out.println("a小于b");
}
System.out.println("程序结束");
}
}
对于 if-else if-else 这种多层判断结构,系统会依次检查每个条件,一旦某个条件成立,就执行对应分支并结束整个结构(后续 else 不再判断)。如果所有 if 和 else if 的条件都不满足,则最终执行 else 中的代码。如下例所示,先判断 a > b 和 a == b 均不成立,于是进入 else 分支输出“a小于b”。
public class Demo7 {
public static void main(String[] args) {
int a = 10;
int b = 20;
if (a > b) {
System.out.println("a大于b");
} else if(a == b) {
System.out.println("a等于b");
} else {
System.out.println("a小于b");
}
System.out.println("程序结束");
}
}
Switch 条件选择
除了 if 系列之外,Java 还提供了 switch-case 结构用于实现多分支选择。该结构适用于一个变量与多个固定值进行比较的场景。
switch 后面的表达式可以返回 char、int 类型,甚至支持 String 等引用类型。当表达式的值与某个 case 后的常量匹配时,程序就会执行该 case 下的代码块。如果没有匹配项,则执行 default 分支(default 是可选的)。
以下是一个判断字符是否为 'a'、'b'、'c' 或 'd' 的示例:
public class Demo8 {
public static void main(String[] args) {
// 编写一个switch case结构,判断一个字符是否是字母a、b、c、d
char ch = 'a';
switch (ch) {
case 'a': {
System.out.println("字母a");
break;
}
case 'b': {
System.out.println("字母b");
break;
}
case 'c': {
System.out.println("字母c");
break;
}
case 'd': {
System.out.println("字母d");
break;
}
// default非必须
default: {
System.out.println("不是字母a、b、c、d");
}
}
}
}
输出结果为:
字母a
进程已结束,退出代码为 0
需要注意的是,每个 case 分支末尾通常需要添加 break 语句,以防止出现“case穿透”现象——即一个 case 执行完后未中断,会继续执行下一个 case 的内容,即使其值并不匹配。这种行为虽然在某些特殊情况下有用,但通常不符合预期,容易引发逻辑错误,需特别留意。
[此处为图片2]
public static void main(String[] args) {
// 使用switch case语句判断字符是否为a、b、c、d之一
char ch = 'a';
switch (ch) {
case 'a': {
System.out.println("字母a");
// 无break,会继续执行下一个case
}
case 'b': {
System.out.println("字母b");
}
case 'c': {
System.out.println("字母c");
}
case 'd': {
System.out.println("字母d");
}
default: {
System.out.println("不是字母a、b、c、d");
}
}
}
输出结果如下:
字母a
字母b
字母c
字母d
不是字母a、b、c、d
进程已结束,退出代码为 0
循环结构概述
Java 提供了多种循环控制结构,主要包括:while 循环、do-while 循环、for 循环以及用于遍历数组的增强型 for 循环(也称 foreach 循环)。while 循环
其基本语法格式如下:while(布尔表达式) {
// 循环体
}
当布尔表达式的值为 true 时,程序会执行大括号内的循环体。通常情况下,初始条件设置为 true,在循环过程中通过变量更新使条件最终变为 false,从而终止循环。若未设置合理的退出条件,则可能造成死循环。
在某些特殊场景中,例如网络请求监听,需要持续运行,此时可使用恒真条件:
while(true) {
// 持续执行的操作,如监听客户端连接
}
[此处为图片1]
以下是一个利用 while 循环计算 1 到 100 所有整数之和的示例:
public class Demo1 {
public static void main(String[] args) {
int sum = 0;
int i = 1;
while(i <= 100) {
sum += i;
i++;
}
System.out.println(sum); // 输出:5050
}
}
do-while 循环
与 while 不同的是,do-while 循环先执行一次循环体,再判断布尔表达式是否成立。因此,无论条件是否满足,循环体至少会被执行一次。其结构如下:do {
// 循环体
} while (布尔表达式);
执行流程是:首先进入 do 块执行代码,然后检查 while 后的条件,若为 true,则重复执行;否则跳出循环。
下面通过对比方式展示 while 和 do-while 在相同逻辑下的表现:
public class Demo2 {
public static void main(String[] args) {
int sum = 0;
int i = 1;
// 使用while循环求和
while(i <= 100) {
sum += i;
i++;
}
System.out.println(sum); // 输出5050
System.out.println("------------------");
// 重置变量
sum = 0;
i = 1;
// 使用do-while循环求和
do {
sum += i;
i++;
} while(i <= 100);
System.out.println(sum); // 输出5050
}
}
运行结果:
5050
------------------
5050
进程已结束,退出代码为 0
[此处为图片2]
for 循环
尽管 while 已能实现循环功能,但在实际开发中,循环常包含三个关键部分: 1. 初始化循环变量 2. 循环条件判断(布尔表达式) 3. 循环后变量更新 为了提升编码效率,Java 引入了 for 循环,将上述三要素集中到一条语句中,使结构更清晰,便于维护。语法形式如下:for(初始化; 条件判断; 更新操作) {
// 循环体
}
这样可以在括号内统一管理循环控制逻辑,而循环体内专注于业务处理。
例如,同样计算 1 到 100 的累加和:
public class Demo2 {
public static void main(String[] args) {
int sum = 0;
for(int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println(sum); // 输出5050
}
}
由此可见,for 循环不仅结构紧凑,而且减少了因遗漏初始化或更新而导致的错误风险。
for循环的执行流程解析
在Java中,for循环遵循一套明确的执行顺序:首先进行初始化变量的操作,接着判断布尔表达式的值是否为true。如果条件成立,则执行大括号{}内的循环体代码,随后执行更新变量语句。完成一轮后,再次检查布尔表达式,若仍为true,则重复执行循环体和更新操作。这一过程持续进行,直到布尔表达式返回false为止,此时不再执行循环体,也不会再对控制变量进行更新。
示例代码如下:
public class Demo5 {
public static void main(String[] args) {
int sum = 0;
for(int i = 1; i <= 100; i++) {
sum += i; // 执行循环的代码
}
System.out.println(sum);
}
}
[此处为图片1]
增强型for循环简介
Java支持一种更为简洁的遍历方式——增强型for循环(也称为foreach循环),常用于数组或集合的元素遍历。其语法结构为:
for(声明语句 : 表达式) {
// 循环体
}
该循环会自动遍历表达式所表示的数组或集合,循环次数等于容器长度,每次迭代将当前元素赋值给声明语句中的变量。
实际应用示例如下:
public class Demo6 {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
for(int i: a) {
System.out.println(i);
}
}
}
输出结果:
1
2
3
4
5
进程已结束,退出代码为 0
[此处为图片2]
break与continue关键字详解
在Java循环结构中,break和continue是两个用于控制流程的关键字。
- break:用于立即终止当前所在的循环,跳出循环体后继续执行循环之后的代码。注意,它只是中断循环,并非停止整个程序运行。
- continue:作用是跳过当前这一次循环的剩余部分,直接进入下一次循环的判断阶段。对于while循环,需确保在使用continue前完成变量更新,否则可能导致死循环;而在for循环中,continue会先执行更新操作,再判断条件是否满足。
以下为具体演示代码:
public class Demo7 {
public static void main(String[] args) {
// 使用break查找1~100中第一个能被5整除的数
int i = 1;
while(true) {
if(i % 5 == 0) {
System.out.println(i);
break;
}
i++;
}
System.out.println("循环结束:打印第一个被5整除的数字");
// 在while循环中使用continue,跳过所有5的倍数
i = 1;
while(i <= 100) {
if (i % 5 == 0) {
i++;
continue;
}
System.out.println(i);
i++;
}
System.out.println("演示while循环中的continue功能,跳过当前循环,继续下一次循环。");
System.out.println("循环结束:打印除了被5整除的数字");
// 在for循环中使用continue实现相同效果
for(i = 1; i <= 100; i++) {
if(i % 5 == 0) {
continue;
}
System.out.println(i);
}
System.out.println("演示for循环中的continue功能,跳过当前循环,继续下一次循环。");
System.out.println("循环结束:打印除了被5整除的数字");
}
}
[此处为图片3]
for与while/do-while循环的关键差异点总结
- 在while循环中使用continue时,必须保证循环变量的更新操作位于continue之前,否则可能造成无限循环。
- 而在for循环中,即使遇到continue,系统也会自动执行更新变量步骤,然后再判断循环条件,从而避免死循环问题。


雷达卡


京公网安备 11010802022788号







