Java学习之旅第一季-24:控制语句之跳转语句

控制语句中的最后一种称之为跳转语句,它可以在程序执行过程中强行改变其执行走向,Java提供了多种手段帮实现程序的跳转:

  • break 关键字,用于switch语句 和循环语句中
  • continue 关键字,用于循环语句中
  • return 关键字,用于方法中,可结束方法的执行
  • try-catch 结构,用于异常处理,跳转只是其"附带"的作用

24.1 break

break之前在switch语句中使用过,当时它的作用是结束整个switch语句。它也可以用在循环中终止循环。下面还是使用案例演示其用法。

案例:计算1-1000之间从1开始加到1000,当结果超过2000是结束,输出此时的结果

int result = 0;                     // 声明存储计算结果的变量
for (int i = 1; i <= 1000; i++) {   // 循环1000次
    result += i;                    // 从1开始往result上累加
    if (result > 2000) {            // 一旦结果超过2000时
        System.out.println(i);
        System.out.println(result);  // 输出结果
        break;                       // 结束循环
    }
}

当第7行的break执行后,整个for循环就结束了,接着执行for循环后面的代码(如果有的话)。

另外可以看到,在循环中使用break,通常是放在选择语句中,在循环的过程中,某条件成立才执行break从而退出循环。

但是需要注意的是,如果 break 直接用于嵌套循环中的内循环,则只会终止内循环,不对对外循环有效果。当然我们可以使用其他方式来终止外循环。

24.2 continue

continue 只能用于循环结构中,同样可以改变程序的执行流程,也通常在循环中与选择语句一起使用。但它与 break 不同的是 continue 只会跳过当前循环,然后继续循环条件的判断,进而决定是否进行下一次循环。

案例:计算1-1000之间的除了个位是7的所有整数之和

int result = 0;                     // 声明存储计算结果的变量
for (int i = 1; i <= 1000; i++) {   // 循环1000次
    if (i % 10 == 7) {              // 如果个位是7
        // 结束本次循环,即不会执行第 8 行的累加,直接回到第 2 行进行 i++ 的执行,
        // 再判断是否还小于或等于1000
        continue;                   
    } 
    result += i;
}
System.out.println(result);

24.3 Label标签

Label 标签不是 Java 中的关键字,它就是一个标识符,只是后面带有冒号,就是用于标识代码块。通常在循环中使用,特别是用于嵌套循环中,可以实现内循环执行到某个特定条件时终止外循环。

下面的代码片段演示了Label的用法:

a:                                   // 声明标签a, 用于标识后续的for循环语句(2-10行)
for (int i = 1; i <= 5; i++) {       // 外循环执行5次循环
    for (int j = 1; j <= 5; j++) {   // 内循环执行5次循环
        if (i * j == 10) {           // 判断乘积是否为10
            break a;                 // 跳转到标签a标识的代码块后,即结束外循环
        }
        System.out.print(i * j + "\t");
    }
    System.out.println();
}

使用步骤:

  1. 在需要标识的代码语句前加上自定义的标识符,以冒号结尾
  2. 在循环中使用break或continue时,后面跟上该标识符,使程序跳转到这个标签处执行,从而改变程序的执行流程

下面再举一个并不常见的较为极端的例子,主要是理解其运行规则:

for (int i = 1; i < 4; i++) {
    a:
    {
        b:
        {
            c:
            {
                System.out.println("i 是 " + i);
                if (i == 1) break a;
                if (i == 2) break b;
                if (i == 3) break c;
            }
            System.out.println("跳转到标签c后。");
        }
        System.out.println("跳转到标签b后。");
    }
    System.out.println("跳转到标签a后。");
}

这里的标签用于循环体内,比如标签b,它标识了代码块 5 - 14行,所以当执行 break b 时,会直接执行第15行。最终输出的结果是:

i 是 1
跳转到标签a后。
i 是 2
跳转到标签b后。
跳转到标签a后。
i 是 3
跳转到标签c后。
跳转到标签b后。
跳转到标签a后。

在其他语言中,有提供关键字 goto 用于在程序中任意跳转,业界认为 goto 的滥用会导致系统维护黑洞,造成很难查找的bug。但Java中一直将 goto 作为关键又没有实现其功能。

24.4 return

用于方法中结束方法体的执行过程。在 return 关键字后可以跟上字面量,变量,表达式或方法调用,这些都可以作为方法的返回值。

本小节我们只关注在main方法至于return直接终止main方法的场景,此时程序就直接执行完。下面使用一个非常简单的例子理解下return的作用:

static void main() {
    System.out.println("开始");
    for (int i = 0; i < 10; i++) {
        if (i == 5) {
            return;    // 直接结束方法的执行,连for循环后的 第8行也不执行
        }
    }
    System.out.println("结尾");
}

输出:

开始

关于return,它还可携带返回值,后续第二季涉及到方法的语法时还会有更详细的介绍。

23.5 小结

Java提供了break(终止循环)、continue(跳过当前循环)、return(结束方法执行)和try-catch(异常跳转)四种跳转控制方式。break用于完全终止循环,continue仅跳过当前循环,而return直接结束方法执行。通过标签(Label)可实现嵌套循环的精准控制,如break a可终止外循环。return还可携带返回值,其后的代码不会执行。这些语句通常与条件判断配合使用,是控制程序流程的重要工具。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值