第一部分:break 语句
立即终止当前循环或switch,跳出整个结构
学习目标
理解break在循环和switch中的作用域与执行流程
1
基本语法
break; // 无label,跳出最近一层循环或switch
2
循环中的 break 示例
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break; // 当i==5时,整个for循环结束
}
System.out.println(i);
}
// 输出:1 2 3 4
3
switch 中的 break 示例
int day = 3;
switch (day) {
case 1:
System.out.println("周一");
break;
case 3:
System.out.println("周三");
break; // 阻止继续向下执行case 4
case 4:
System.out.println("周四");
break;
default:
System.out.println("未知");
}
第二部分:continue 语句
跳过本次循环剩余语句,直接进入下一次迭代
1
基本语法
continue; // 无label,跳过最近一层循环的剩余语句
2
continue 示例
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // 跳过偶数,不执行打印
}
System.out.println(i);
}
// 输出:1 3 5 7 9
3
while 中的 continue
int num = 0;
while (num < 10) {
num++;
if (num == 4) {
continue; // 跳过4,继续下一次循环
}
System.out.println(num);
}
第三部分:label 标签
给循环或代码块命名,实现多级跳出或跳过
1
定义与语法
outer: // label名称后跟冒号
for (...) {
inner:
for (...) {
break outer; // 跳出outer循环
continue inner; // 跳过inner本次循环
}
}
2
break + label 示例
outer:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i * j > 4) {
break outer; // 跳出外层循环
}
System.out.printf("%d * %d = %d%n", i, j, i * j);
}
}
// 输出:1*1=1 1*2=2 1*3=3 2*1=2 2*2=4
3
continue + label 示例
outer:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (j == 2) {
continue outer; // 跳过外层本次循环
}
System.out.println(i + "," + j);
}
}
// 输出:1,1 2,1 3,1
第四部分:常见错误与调试
识别并避开 break/continue/label 的典型陷阱
错误1:在switch外单独使用break
错误示例
if (x > 10) {
break; // ❌ 编译错误:break只能在循环或switch中使用
}
正确做法
for (...) {
if (x > 10) {
break; // ✅ 在循环内使用
}
}
错误2:label 作用域误用
错误示例
myLabel: // label 只作用于循环或代码块
int a = 10; // ❌ 编译错误:label不能直接用于普通语句
错误3:continue 嵌套层级混淆
错误示例
for (...) {
while (...) {
continue outer; // ❌ outer 未定义
}
}
调试小贴士
- 使用IDE的断点功能,单步执行观察 break/continue 的跳转
- 在复杂嵌套循环中,先用简单数字打印验证流程
- label 命名要见名知意,如 outerLoop、innerLoop
- 避免过度使用 label,优先重构代码结构
第五部分:综合实战项目
用 break/continue/label 实现真实场景需求
1
质数筛选器
public class PrimeFilter {
public static void main(String[] args) {
outer:
for (int n = 2; n <= 100; n++) {
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
continue outer; // 非质数,跳过外层打印
}
}
System.out.print(n + " ");
}
}
}
2
菜单系统
import java.util.Scanner;
public class MenuSystem {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
menuLoop:
while (true) {
System.out.println("\n=== 菜单 ===\n1. 查询\n2. 添加\n3. 退出");
int choice = sc.nextInt();
switch (choice) {
case 1:
System.out.println("执行查询...");
break;
case 2:
System.out.println("执行添加...");
break;
case 3:
System.out.println("再见!");
break menuLoop; // 跳出 menuLoop 循环
default:
System.out.println("无效选项,重新输入");
continue menuLoop; // 重新显示菜单
}
}
sc.close();
}
}
第六部分:练习与知识梳理
通过练习与思维导图巩固全部要点
动手练习清单
- 使用 break 实现“猜数字”游戏,猜中立即结束
- 使用 continue 打印 1~100 中所有不被 3 或 5 整除的数
- 使用 label + break 跳出三重嵌套循环
- 利用 continue + label 实现矩阵对角线打印
知识思维导图(文字版)
break
→
立即终止
→
循环 / switch
continue
→
跳过本次
→
继续下一次
label
→
多级控制
→
精准跳转
核心要点回顾
- break 用于立即终止当前循环或switch
- continue 用于跳过本次循环剩余语句
- label 让 break/continue 作用于指定层级
- label 只能用于循环或代码块,不能用于普通语句
- 过度使用 label 会降低可读性,谨慎使用
编码最佳实践
- 优先使用结构化方法(return、布尔标志)替代深嵌套 label
- 为 label 起见名知意的名字,如 outerLoop、retryBlock
- 在复杂循环中写清注释,说明 break/continue 的跳转目标
- IDE 断点调试验证流程,确保逻辑正确
- 代码审查中关注 label 的必要性,及时重构