Java 分支与循环 是 Java 基础语法中最核心的部分,几乎所有程序逻辑都依赖它们。
分支(选择结构)决定“走哪条路”,循环(迭代结构)决定“重复做多少次”。
下面从语法 → 特点 → 使用场景 → 代码示例 → 易错点 完整梳理,适合零基础到面试复习。
1. 分支结构(选择结构)
Java 提供两种主要分支方式:if…else(条件判断)和 switch(多分支等值匹配)。
1.1 if 语句(最常用)
| 形式 | 特点 | 适用场景 | 执行次数 |
|---|---|---|---|
| if | 单分支 | 只需判断是否做某事 | 0 或 1 次 |
| if…else | 二选一 | 两种互斥情况 | 必执行 1 次 |
| if…else if…else | 多条件判断(顺序匹配) | 多档次判断(如成绩分级) | 0~n 次 |
代码示例
int score = 85;
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 80) {
System.out.println("良好");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
三元运算符(if…else 的简写形式)
// 格式:条件 ? 表达式1 : 表达式2
String result = score >= 60 ? "及格" : "不及格";
int max = a > b ? a : b;
1.2 switch 语句(JDK 14+ 增强)
传统 switch(JDK 7 前只支持 int、byte、short、char)
int day = 3;
String dayName;
switch (day) {
case 1:
dayName = "星期一";
break;
case 2:
dayName = "星期二";
break;
// ...
default:
dayName = "非法日期";
}
switch 穿透(不写 break 会继续执行下一个 case)
JDK 12+ switch 表达式(推荐,带返回值,更安全)
String dayName = switch (day) {
case 1 -> "星期一";
case 2 -> "星期二";
case 3, 4, 5 -> "工作日"; // 多值合并(JDK 14+)
case 6, 7 -> "周末";
default -> "非法";
};
支持类型(2025 现状):
- byte, short, char, int
- 包装类(Byte, Short, Character, Integer)
- String(JDK7+)
- enum(枚举)
- 不能用 long、float、double、boolean
2. 循环结构(重复执行)
Java 有四种循环:for(最常用)、while、do-while、for-each(增强 for)
| 循环类型 | 特点 | 适用场景 | 先判断还是先执行 |
|---|---|---|---|
| for | 计数循环,结构清晰 | 已知循环次数 | 先判断 |
| while | 先判断后执行 | 不确定循环次数 | 先判断 |
| do-while | 先执行后判断,至少执行一次 | 至少要执行一次的情况(如菜单) | 后判断 |
| for-each | 专门遍历数组/集合 | 只读遍历集合/数组 | — |
2.1 for 循环(最常用)
// 经典格式
for (int i = 0; i < 10; i++) {
System.out.println(i); // 0~9
}
// 求 1~100 的和
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("1+2+...+100 = " + sum); // 5050
2.2 while 循环
int i = 1;
int sum = 0;
while (i <= 100) {
sum += i;
i++;
}
System.out.println(sum); // 5050
死循环写法(小心使用)
while (true) {
// 通常配合 break 使用
}
2.3 do-while 循环(至少执行一次)
int num;
do {
System.out.print("请输入1~10之间的数字:");
num = scanner.nextInt();
} while (num < 1 || num > 10);
System.out.println("你输入了合法数字:" + num);
2.4 增强 for 循环(for-each)
int[] arr = {10, 20, 30, 40};
// 只读遍历
for (int num : arr) {
System.out.println(num);
}
// 遍历集合
List<String> list = Arrays.asList("A", "B", "C");
for (String s : list) {
System.out.println(s);
}
注意:for-each 不能修改元素本身(基本类型),引用类型可以改对象内容。
3. 循环控制语句(break、continue、return)
| 语句 | 作用 | 适用范围 | 常用场景 |
|---|---|---|---|
| break | 立即跳出当前循环 | for/while/do-while/switch | 找到目标后结束循环 |
| continue | 跳过本次循环,进入下一次 | for/while/do-while | 过滤不符合条件的数据 |
| return | 结束整个方法(包括循环) | 方法内 | 提前返回结果 |
示例
for (int i = 1; i <= 10; i++) {
if (i == 5) {
continue; // 跳过 5
}
if (i == 8) {
break; // 遇到 8 直接结束循环
}
System.out.print(i + " "); // 输出 1 2 3 4 6 7
}
4. 经典练习题(建议手写)
- 输出 1~100 之间所有奇数之和
- 打印 9×9 乘法表(双重 for 循环)
- 猜数字游戏(do-while + 随机数)
- 统计字符串中每个字符出现次数(for-each + switch 或 Map)
- 求 1~100 内所有质数(for + 内层判断)
5. 易错点 & 面试高频总结
- if 后面不要加分号:
if (a > b); { ... }会导致 if 体为空 - switch 忘记 break → 导致 case 穿透
- while(true) 死循环 → 忘记 break 或条件变化
- for 循环中修改循环变量 → 容易死循环或跳跃
- 三元运算符嵌套 → 可读性差,建议用 if
- for-each 不能用 break 修改集合(ConcurrentModificationException)
一句话记忆:
- 分支:if 看条件,switch 看值
- 循环:for 数得清,while 看条件,do-while 至少一次
- 控制:break 跳出,continue 跳过,return 结束方法
有哪一部分想看更详细的代码示例(比如九九乘法表、质数判断、猜数字完整版),或者想练习特定题目,我可以继续给你出题和解析!加油!