控制流
conditionals、lifecycle-of-a-program。
25 分钟
控制流
java-conditionals 已讲 if/else 与循环——本课深化 switch 表达式、增强 for、break/continue 与程序执行路径,让分支逻辑更清晰。
学习目标
- 使用 switch 表达式与 yield 返回值
- 正确选择 for、while、增强 for 循环
- 描述从
main到方法返回的执行顺序
switch 表达式(JDK 14+)
String level = switch (order) {
case 1, 2 -> "intro";
case 3, 4, 5 -> "core";
default -> "advanced";
};
int days = switch (month) {
case 2 -> 28;
case 4, 6, 9, 11 -> 30;
default -> {
if (month < 1 || month > 12) throw new IllegalArgumentException();
yield 31;
}
};
->分支无需break,避免 fall-through 漏写- 多行逻辑用
yield返回值 - 枚举 switch 应 覆盖所有常量 或加
default
循环与跳转
List<String> slugs = List.of("jvc-types", "jvc-control", "jvc-oop");
for (String slug : slugs) { // 增强 for,只读遍历首选
if (slug.startsWith("jvc-o")) continue;
System.out.println(slug);
}
for (int i = 0; i < slugs.size(); i++) { // 需要索引时用经典 for
System.out.println(i + ": " + slugs.get(i));
}
| 场景 | 推荐 |
|---|---|
| 遍历集合 | 增强 for 或 Stream |
| 需要索引 | 经典 for 或 IntStream.range |
| 条件未知次数 | while |
| 至少执行一次 | do-while |
程序生命周期(简图)
JVM 启动 → 加载主类 → main(String[] args)
→ 顺序执行语句、进入方法栈帧
→ return / 异常 → 栈帧弹出
→ main 结束 → JVM 退出(非守护线程结束时)
理解 栈帧 有助于读递归与调试;深度递归可能 StackOverflowError。
练习
- 用 switch 表达式把
LessonStatus枚举映射为中文描述 - 用增强 for 遍历
Map的entrySet()(预习 jvc-collections) - 写 读文件行直到 EOF(预习 )