第一部分: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 的必要性,及时重构