1. 分支结构:if语句
在 Java 中,if 分支结构用于根据条件执行不同的代码块,具体有以下三种形式:
1.1 单分支结构
语法格式:
if (条件表达式) {
// 条件为 true 时执行的代码
}
示例:
int score = 80;
if (score >= 60) {
System.out.println("考试及格!");
}
说明:若条件成立,则执行代码块;否则跳过。
1.2 双分支结构(if-else)
语法格式:
if (条件表达式) {
// 条件为 true 时执行的代码
} else {
// 条件为 false 时执行的代码
}
示例:
int num = 7;
if (num % 2 == 0) {
System.out.println("偶数");
} else {
System.out.println("奇数"); // 输出:奇数
}
说明:根据条件结果选择执行其中一个代码块。
1.3 多分支结构(if-else if)
语法格式:
if (条件表达式1) {
// 条件1为 true 时执行的代码
} else if (条件表达式2) {
// 条件2为 true 时执行的代码
} else if (条件表达式3) {
// 条件3为 true 时执行的代码
}
...
else {
// 所有条件均为 false 时执行的代码
}
示例:
int score = 85;
if (score >= 90) {
System.out.println("等级:A");
} else if (score >= 80) {
System.out.println("等级:B"); // 输出:等级:B
} else if (score >= 70) {
System.out.println("等级:C");
} else {
System.out.println("等级:D");
}
说明:
- 按顺序判断条件,执行第一个成立的条件对应的代码块。
else块为可选,用于处理所有条件均不满足的情况。
注意事项
- 条件表达式:必须为布尔类型(
true/false),不可使用数值类型(如0或1)。 - 代码块作用域:在
{}内定义的变量仅在块内有效。 - 执行顺序:在多分支结构中,一旦某个条件成立,后续条件不再判断。
2. 分支结构:switch语句(补充注意事项)
2.1 switch 的语法格式与执行流程
语法格式:
switch (表达式) {
case 值1:
执行代码1;
break;
case 值2:
执行代码2;
break;
...
default:
执行代码n;
}
执行流程:
- 计算
表达式的值(必须是byte、short、int、char、枚举(JDK5+)、String(JDK7+))。 - 将表达式的结果依次与
case后的值匹配,匹配成功则执行对应代码块。 - 若未匹配任何
case,则执行default块(可选)。 break用于跳出整个switch结构,若无break,会发生“穿透”(继续执行后续case的代码)。
示例:
String fruit = "Apple";
switch (fruit) {
case "Apple":
System.out.println("苹果");
break;
case "Banana":
System.out.println("香蕉");
break;
default:
System.out.println("未知水果");
}
2.2 注意事项(补充)
-
表达式类型限制:
- 支持类型:
byte、short、int、char、枚举(JDK5+)、String(JDK7+)。 - 不支持:
double、float、long。
// 错误示例:表达式类型为 long long num = 10L; switch (num) { // 编译报错 // ... } - 支持类型:
-
case 值的要求:
- 必须为字面量(常量),不可使用变量或表达式。
- 所有
case的值必须唯一,不允许重复。
final int VAL = 10; int a = 10; switch (a) { case 5: // 合法(字面量) case VAL: // 合法(常量) case a: // 非法(变量) // ... } -
break 与穿透现象:
- 若省略
break,会继续执行后续case的代码,直到遇到break或结束。 - 穿透的合理利用:当多个
case需要执行相同代码时,可合并处理。
int month = 2; switch (month) { case 1: case 3: case 5: System.out.println("31天"); break; case 2: System.out.println("28天"); break; default: System.out.println("30天"); } - 若省略
2.3 穿透性的实际应用
适用场景:
多个 case 分支需要执行相同逻辑时,通过穿透性减少重复代码。
示例:
int scoreLevel = 2;
switch (scoreLevel) {
case 1:
case 2: // 合并处理 case 1 和 case 2
System.out.println("普通等级");
break;
case 3:
System.out.println("优秀等级");
break;
default:
System.out.println("无效等级");
}
3. 循环结构
3.1 for 循环
语法格式:
for (初始化语句; 循环条件; 迭代语句) {
循环体语句;
}
执行流程:
- 执行初始化语句(仅一次)。
- 检查循环条件:
- 若为
true,执行循环体。 - 若为
false,结束循环。
- 若为
- 执行迭代语句,回到第2步。
示例:
// 输出 3 次 Hello World
for (int i = 0; i < 3; i++) {
System.out.println("Hello World");
}
3.2 while 循环
语法格式:
初始化语句;
while (循环条件) {
循环体语句;
迭代语句;
}
执行流程:
- 执行初始化语句。
- 检查循环条件:
- 若为
true,执行循环体和迭代语句。 - 若为
false,结束循环。
- 若为
示例:
int i = 0;
while (i < 3) {
System.out.println("Hello World");
i++;
}
3.3 do-while 循环
语法格式:
初始化语句;
do {
循环体语句;
迭代语句;
} while (循环条件);
执行流程:
- 执行初始化语句。
- 先执行一次循环体和迭代语句。
- 检查循环条件:
- 若为
true,继续循环。 - 若为
false,结束循环。
- 若为
特点:
- 先执行后判断,至少执行一次循环体。
示例:
int i = 0;
do {
System.out.println("Hello World");
i++;
} while (i < 3);
3.4 三种循环对比
| 对比维度 | for | while | do-while |
|---|---|---|---|
| 执行顺序 | 先判断后执行 | 先判断后执行 | 先执行后判断 |
| 适用场景 | 已知循环次数(如遍历数组) | 未知循环次数(如用户输入校验) | 至少执行一次(如菜单交互) |
| 变量作用域 | 控制变量仅在循环内有效 | 控制变量在循环外可继续使用 | 控制变量在循环外可继续使用 |
代码示例对比:
// for 循环变量作用域
for (int i = 0; i < 3; i++) {
System.out.println(i); // 合法
}
// System.out.println(i); // 报错,i 超出作用域
// while 循环变量作用域
int j = 0;
while (j < 3) {
System.out.println(j);
j++;
}
System.out.println(j); // 输出:3
3.5 死循环
定义:无限执行的循环,需外部干预才能终止。
语法形式:
// for 死循环
for (;;) {
System.out.println("Hello World1");
}
// while 死循环(推荐)
while (true) {
System.out.println("Hello World2");
}
// do-while 死循环
do {
System.out.println("Hello World3");
} while (true);
应用场景:
- 服务器监听请求。
- 实时数据轮询。
3.6 循环嵌套
定义:循环内部包含另一个循环。
示例:
// 外层循环控制行,内层循环控制列
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
System.out.print("❤️");
}
System.out.println();
}
输出:
❤️❤️❤️❤️❤️
❤️❤️❤️❤️❤️
❤️❤️❤️❤️❤️
特点:
- 外层循环每执行一次,内层循环完整执行一轮。
3.7 break 与 continue
| 关键字 | 功能 | 适用场景 |
|---|---|---|
break | 立即终止所在循环或 switch 分支 | 循环中满足条件提前退出 |
continue | 跳过当前迭代,进入下一次循环 | 循环中需要忽略某些特定情况 |
示例:
// break 示例:找到第一个大于 5 的数后终止循环
int[] nums = {3, 6, 2, 8};
for (int num : nums) {
if (num > 5) {
System.out.println("找到:" + num);
break; // 终止循环
}
}
// continue 示例:跳过奇数,输出偶数
for (int i = 1; i <= 10; i++) {
if (i % 2 != 0) {
continue; // 跳过当前迭代
}
System.out.println(i);
}
注意事项:
break可结束循环或switch,但不能跳出方法或类。continue仅能在循环中使用,不可用于switch。
总结
- 循环选择原则:
- 已知次数用
for,未知次数用while,必须执行一次用do-while。
- 已知次数用
- 代码优化:
- 避免多层嵌套循环(时间复杂度高),必要时优化算法。
- 死循环需谨慎使用,确保有退出条件或外部干预机制。
- 控制语句:
- 合理使用
break和continue简化逻辑,但避免滥用影响可读性。
- 合理使用
2825

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



