源本科技 | 码上会

Java 中的跳转语句

2025/12/25
50
0

学习目标

  • 掌握 Java 中三种跳转语句(breakcontinuereturn)的用法

  • 理解它们如何改变程序的正常执行流程

  • 学会使用带标签的 break 实现类似 goto 的结构化跳转

  • 避免“不可达代码”等常见编译错误

  • 在循环、方法和条件控制中合理运用跳转语句


什么是跳转语句?

在 Java 中,跳转语句(Jump Statements) 用于在特定条件下主动中断或转移程序的执行流程。它们不是无序的“跳来跳去”,而是在结构化编程框架内提供更灵活的控制能力。Java 提供三种跳转语句:

语句

作用范围

主要用途

continue

循环内部

跳过当前迭代,进入下一次循环

break

循环或 switch

立即终止当前循环或 switch

return

方法内部

从方法返回,可带返回值


continue

跳过当前迭代,详情请参考《Java 中的 continue 语句

continue 用于跳过本次循环中剩余的代码,直接进入下一次循环的条件判断

基础示例:跳过数字 2

class Main {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            if (i == 2) {
                System.out.println(); // 打印空行便于观察
                continue; // 跳过本次循环
            }
            System.out.println(i);
        }
    }
}

输出结果:

0
1

3
4

关键点

  • i == 2 时,continue 触发,System.out.println(i) 被跳过

  • 循环继续执行 i++,然后判断 i < 5,进入下一轮

💡 应用场景:过滤无效数据、跳过特殊索引、避免嵌套过深的 if


break

立即终止循环或 switch,详情请参考《Java 中的 break 语句

break 用于完全退出当前所在的循环(for/while/do-while)或 switch 语句。

示例 1:提前退出 for 循环

class Main {
    public static void main(String[] args) {
        int n = 10;
        for (int i = 0; i < n; i++) {
            if (i == 4)
                break; // 终止循环
            System.out.println(i);
        }
    }
}

输出:

0
1
2
3

说明:当 i == 4 时,break 执行,循环立即结束,不再打印 4 及之后的数字。


示例 2:带标签的 break

虽然 Java 没有 goto 语句(因其导致代码难以维护),但提供了带标签的 break,可在多层嵌套中跳出指定代码块。

class Main {
    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            one: { 
                two: { 
                    three: { 
                        System.out.println("i=" + i);
                        if (i == 0) break one;
                        if (i == 1) break two;
                        if (i == 2) break three;
                    }
                    System.out.println("after label three");
                }
                System.out.println("after label two");
            }
            System.out.println("after label one");
        }
    }
}

输出:

i=0
after label one
i=1
after label two
after label one
i=2
after label three
after label two
after label one

解析

  • break one; → 直接跳出到 one 标签外,跳过 twothree 的后续语句

  • 标签语法:labelName: statementOrBlock

⚠️ 注意:标签必须放在语句或代码块前,且 break label; 只能跳出外层结构,不能向前跳。


return

从方法返回,详情请参考《Java 中的 return 关键字

return 用于结束当前方法的执行,并将控制权交还给调用者。若方法有返回类型,return 必须提供对应值。

示例:返回两数之和

class ReturnExample {
    public static int calculateSum(int num1, int num2) {
        System.out.println("Calculating the sum of " + num1 + " and " + num2);
        int sum = num1 + num2;
        System.out.println("The sum is: " + sum);
        return sum; // 返回结果并退出方法
        // System.out.println("end"); // 编译错误:unreachable statement
    }

    public static void main(String[] args) {
        int result = calculateSum(5, 10);
        System.out.println("Result: " + result);
    }
}

输出:

Calculating the sum of 5 and 10
The sum is: 15
Result: 15

关键规则

情况

return 用法

void 方法

return;(可省略,方法结束自动返回)

非 void 方法

必须 return value;,且类型匹配

不可达代码

return 后的任何语句都会导致编译错误

✅ 例外:在 try-catch-finally 中,finally 块总会执行,即使前面有 return


三种跳转语句对比

语句

作用对象

是否结束整个结构

是否可带标签

典型用途

continue

当前循环

❌ 仅跳过本次迭代

✅(但极少用)

跳过特定元素

break

循环 / switch

✅ 完全退出

提前终止、多层跳出

return

当前方法

✅ 退出方法

返回结果、提前结束方法


常见陷阱

陷阱 1:return 后写代码

public int getValue() {
    return 42;
    System.out.println("Never executed"); // Unreachable code
}

陷阱 2:忘记 break 导致 switch 穿透

switch (day) {
    case 1:
        System.out.println("Monday");
        // 忘记 break → 会继续执行 case 2!
    case 2:
        System.out.println("Tuesday");
        break;
}

最佳实践

  • 优先使用 continue 替代深层嵌套的 if

  • 在多重循环中谨慎使用带标签的 break,确保逻辑清晰

  • return 尽早返回(Guard Clause 模式)可提高可读性:

public void process(String input) {
    if (input == null || input.isEmpty()) {
        return; // 提前退出,避免后续复杂判断
    }
    // 正常处理逻辑...
}

重点总结

要点

说明

continue

跳过当前循环体剩余部分,进入下一次迭代

break

立即终止最近的循环或 switch;可用标签跳出多层

return

结束方法执行,可返回值;其后代码不可达

结构化跳转

Java 用标签 break 替代 goto,保持代码可维护性

编译安全

跳转语句受编译器严格检查,避免逻辑混乱


思考题

  1. 在一个嵌套 for 循环中,如何使用带标签的 break 直接跳出最外层循环?

  2. 能否在 while 循环中同时使用 breakcontinue?请设计一个示例(如:跳过偶数,遇到 10 则终止)。

  3. 为什么 Java 不支持 goto,却允许带标签的 break?这体现了怎样的设计哲学?