在Java编程中,控制流语句是构建程序逻辑的基础。它们决定了代码的执行顺序,允许我们实现条件判断、重复执行和流程跳转等核心功能。本文将全面详解Java中的八大控制流语句——if分支、switch分支、for循环、while循环、do-while循环,以及break、return和continue跳转语句,帮助开发者深入理解其原理、用法和最佳实践。
一、分支语句:根据条件选择执行路径
分支语句允许程序根据不同条件执行不同的代码块,是实现"选择逻辑"的核心工具。Java提供了if和switch两种分支结构,分别适用于不同的场景。
1.1 if语句:灵活的条件判断
if语句是最基础也是最常用的分支结构,它根据布尔表达式的结果决定是否执行特定代码块。其基本语法有三种形式:单分支、双分支和多分支。
1.1.1 单分支if语句
单分支if语句用于在满足特定条件时执行一段代码,语法结构如下:
if (布尔表达式) {
// 当布尔表达式为true时执行的代码块
}
执行逻辑:首先计算布尔表达式的值,如果结果为true,则执行大括号中的代码块;如果为false,则直接跳过该代码块,执行后续语句。
示例1:简单条件判断
int score = 85;
if (score >= 60) {
System.out.println("成绩合格");
System.out.println("可以进入下一阶段学习");
}
System.out.println("评分结束");
上述代码中,由于score的值85大于60,布尔表达式结果为true,因此会输出"成绩合格"和"可以进入下一阶段学习",最后输出"评分结束"。如果score小于60,则只会输出"评分结束"。
注意事项:
- 布尔表达式必须返回boolean类型的值(true或false),不能使用数值类型(这一点与C/C++不同)
- 即使代码块中只有一条语句,也建议使用大括号`{}`包裹,以增强代码可读性和避免逻辑错误
- 布尔表达式中可以使用各种比较运算符(`==`、`!=`、`>`、`<`、`>=`、`<=`)和逻辑运算符(`&&`、`||`、`!`)组合复杂条件
1.1.2 if-else双分支语句
当需要在条件满足和不满足时分别执行不同代码块时,可使用if-else结构:
if (布尔表达式) {
// 条件为true时执行
} else {
// 条件为false时执行
}
示例2:判断奇偶数
int num = 17;
if (num % 2 == 0) {
System.out.println(num + "是偶数");
} else {
System.out.println(num + "是奇数");
}
这段代码会判断num是否为偶数。由于17除以2的余数为1,条件表达式为false,因此会执行else块,输出"17是奇数"。
if-else语句可以嵌套使用,实现更复杂的条件判断:
int age = 20;
boolean hasId = true;
if (age >= 18) {
if (hasId) {
System.out.println("可以进入网吧");
} else {
System.out.println("请出示身份证");
}
} else {
System.out.println("未满18岁,禁止进入");
}
#### 1.1.3 if-else if-else多分支语句
当需要判断多个条件时,可使用if-else if-else结构实现多分支选择:
if (条件1) {
// 条件1为true时执行
} else if (条件2) {
// 条件1为false且条件2为true时执行
} else if (条件3) {
// 前面条件都为false且条件3为true时执行
} else {
// 所有条件都为false时执行(可选)
}
**执行逻辑**:程序会依次判断各个条件,当遇到第一个为true的条件时,执行对应的代码块,然后跳过整个if-else if-else结构;如果所有条件都为false,则执行else块(如果存在)。
**示例3:成绩评级**
int score = 87;
char grade;
if (score >= 90) {
grade = 'A';
} else if (score >= 80) {
grade = 'B';
} else if (score >= 70) {
grade = 'C';
} else if (score >= 60) {
grade = 'D';
} else {
grade = 'F';
}
System.out.println("成绩等级:" + grade); // 输出 "成绩等级:B"
**使用技巧**:
- 多分支条件应按逻辑顺序排列(通常从高到低或从低到高)
- 注意条件之间的包含关系,避免出现永远无法执行的代码(死代码)
- 最后一个else子句可以省略,但建议保留以处理未预料到的情况,增强程序健壮性
### 1.2 switch语句:多值匹配的分支选择
switch语句用于基于一个表达式的值从多个代码块中选择一个执行,适用于判断条件为离散值的场景。JDK 7及以上版本支持int、char、byte、short、枚举类型和String类型的表达式。
#### 1.2.1 switch基本语法
switch (表达式) {
case 值1:
// 当表达式结果等于值1时执行的代码
break; // 可选,用于跳出switch语句
case 值2:
// 当表达式结果等于值2时执行的代码
break;
// ... 更多case分支
default:
// 当表达式结果与所有case值都不匹配时执行的代码(可选)
}
**示例4:根据星期几输出活动安排**
int dayOfWeek = 3; // 假设1表示周一,7表示周日
switch (dayOfWeek) {
case 1:
System.out.println("周一:学习Java基础");
break;
case 2:
System.out.println("周二:练习算法题");
break;
case 3:
System.out.println("周三:学习设计模式");
break;
case 4:
System.out.println("周四:开发小项目");
break;
case 5:
System.out.println("周五:复习本周内容");
break;
case 6:
case 7:
System.out.println("周末:休息或拓展学习");
break;
default:
System.out.println("无效的星期数");
}
上述代码中,dayOfWeek的值为3,因此会执行case 3对应的代码,输出"周三:学习设计模式"。注意case 6和case 7共用了同一个代码块,实现了"或"的逻辑。
#### 1.2.2 switch的执行流程与break的作用
switch语句的执行流程是:
1. 计算表达式的值
2. 依次与各个case后的值进行比较
3. 找到第一个匹配的值,从该case处开始执行代码
4. 直到遇到break语句或switch语句结束
如果没有break语句,程序会继续执行下一个case的代码,这种现象称为"case穿透":
int num = 2;
switch (num) {
case 1:
System.out.println("执行case 1");
case 2:
System.out.println("执行case 2");
case 3:
System.out.println("执行case 3");
default:
System.out.println("执行default");
}
输出结果:执行case 2
执行case 3
执行default
由于case 2后没有break,程序会继续执行case 3和default的代码。在实际开发中,通常需要在每个case块末尾添加break以避免意外的穿透行为,但也可以利用穿透特性实现多值共享同一处理逻辑(如示例4中的周末处理)。
#### 1.2.3 JDK 12+的增强switch(预览特性)
JDK

最低0.47元/天 解锁文章
1297

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



