控制语句中的最后一种称之为跳转语句,它可以在程序执行过程中强行改变其执行走向,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();
}
使用步骤:
- 在需要标识的代码语句前加上自定义的标识符,以冒号结尾
- 在循环中使用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还可携带返回值,其后的代码不会执行。这些语句通常与条件判断配合使用,是控制程序流程的重要工具。
2227

被折叠的 条评论
为什么被折叠?



