在本教程中,您将通过简单的示例掌握 Java 中所有关于分支语句的知识,例如 break、continue 和 return。此外,您还将了解带标签和不带标签的控制语句是如何工作的。到目前为止,我们已经学习了一些 Java 中的基本程序,通过分析这些程序,我们知道每个程序都遵循线性执行,即一个语句接一个语句地执行。但在某些情况下,程序员希望根据某些逻辑条件将控制权引导到某些其他语句部分,而不是最近的语句。在这种情况下,程序员依赖于分支语句,如 break、continue 和 return。break 和 continue 语句可以与标签绑定,也可以不带标签。
在 Java 语言的 50 个关键字中,break 是与循环一起最常用的关键字。break 语句用于在我们不确定需要迭代次数或满足某些特定条件的情况下,立即跳过或终止代码块或循环执行系列。当关键字 break 后跟一个分号时,就形成了一个 break 语句。
语法如下
break;
通常,break 关键字与 switch 语句一起使用。break 语句会逐个退出每个 switch case。以下示例说明了在 switch 语句中使用 break 的方法。
public class Signal{
public static void main(String[] args) {
int colour = 2;
switch (colour) {
case 1:
System.out.println("Green light!proceed driving");
break;
case 2:
System.out.println("Orange light! proceed with caution");
break;
case 3:
System.out.println("Red Light! stop driving");
break;
}
}
此示例将输出“Orange light! proceed with caution”,因为变量 colour 的值为 2。switch 语句将逐个检查 case,直到到达 case 2 给出所需的输出,然后 break 语句将终止该块。
无标签 break 语句通常会终止 break 语句所在的循环。break 语句主要与循环中的 if 语句和 switch case 一起使用。首先,我们可以看看 break 语句在循环中是如何工作的,以中断循环控制。

为了更清楚地说明,请看下面的代码片段,并观察当遇到 break 语句时,for 循环控制是如何终止的。
class UnlabelledBreakInForLoop {
public static void main(String[] args) {
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i == 2 ) {
break ;
}
System.out.printf("i = %d, j = %d%n", i, j);
}
}
}
}
输出
i = 1, j = 1 i = 1, j = 2 i = 1, j = 3 i = 3, j = 1 i = 3, j = 2 i = 3, j = 3
在此示例中,我们提供了一个条件,如果 i = 2,则应中断循环。很明显,无标签的 break 语句会终止最内层的循环。从输出中可以看到,break 语句终止了与值 2 相关的内层循环。
class UnlabelledBreakInWhileLoop{
public static void main(String[] args) {
int i = 1;
while (i<=10) {
if(i==5) {
break;
}
System.out.println(i*i);
i=i+1;
}
System.out.println("Loop breaks and comes out of the loop ");
}
}
输出
1 4 9 16 Loop breaks and comes out of the loop
同样,我们可以在 do-while 循环中使用 break 语句。
class UnlabelledBreakInDoWhileLoop{
public static void main(String[] args) {
int i = 1;
do{
if(i==5) {
break;
}
System.out.println(i*i);
i=i+1;
} while (i<=10);
System.out.println("Loop breaks and comes out of the loop ");
}
}
输出
1 4 9 16 Loop breaks and comes out of the loop
与标签绑定的 break 语句通常称为带标签的 break 语句。带标签的 break 语句会一次性终止整个带标签的部分。带标签的部分从标签开始的地方开始,到标签后面跟着一个 break 语句时结束。带标签的 break 语句的语法如下
break label;
带标签的 break 主要用于嵌套循环中,在这种情况下,终止外层循环变得很方便,无需等待整个执行完成。众所周知,无标签的 break 会退出其所在的循环,而这总是最内层的循环,而带标签的 break 语句会终止深层嵌套的循环集(外层循环)。
以下示例将让您深入了解带标签的 break 在嵌套循环中是如何工作的。
class LabelledBreakInForLoop {
public static void main(String[] args) {
Outer:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i == 2 ) {
break Outer ;
}
System.out.printf("i = %d, j = %d%n", i, j);
}
}
System.out.println("Exited from label");
}
}
输出
i = 1, j = 1 i = 1, j = 2 i = 1, j = 3 Exited from label
现在,为了更好地理解这个例子,请回想我们之前学习的无标签 break 语句的例子,并进行比较。在这里,当条件 i=2 满足时,整个循环被终止,并且循环紧接着的语句被执行。同样,带标签的 break 也作用于 while 和 do-while 循环。
在JAVA语言中用于控制执行的另一个重要关键字是 continue,它会跳过部分执行并继续执行其余部分。continue 语句总是伴随着决策语句,如 if、if...else 等。与 break 不同,continue 语句从不结束循环的执行;相反,它会跳过满足特定条件的部分的执行,并继续执行循环的剩余部分。continue 语句的语法如下所示,非常简单
continue;
与 break 一样,我们可以将 continue 分为两种形式:无标签 Continue 和有标签 Continue。

在这种情况下,当 if 语句中指定的条件返回 true 时,写在 'continue' 之后的代码块将不会执行。控制权会转移回下一次迭代,并且剩余的执行将继续进行,直到循环退出。
这是一个打印 1 到 15 之间偶数的示例程序,循环将是这样的
假设我们想打印 1 到 15 之间的奇数,循环会是这样的
public class ContinueInWhileLoop {
public static void main(String args[]){
int i=1;
while (i<=15)
{
if (i%2!=0)
{
i++;
continue;
}
System.out.print(i+" ");
i++;
}
}
}
输出
1 3 5 7 9 11 13 15
请注意,我们给 'i' 赋了初始值 1。在第一个周期中,'for' 检查 i 的值是否小于或等于 15。因为 1<15,循环内的代码将执行,其中 if 语句检查 i 除以 2 的余数是否为零。由于 i%2 不等于零,它会打印值 1。然后,当它通过 i++ 时,'i' 的值从 1 递增到 2。
现在'for'再次检查,发现2<10,控制权转移到if,它检查2%2,收到的余数为零,条件变为真,continue 语句将跳过其下的代码并继续进行递增。
同样,对 3、4、.... 直到 15 进行求值,并产生如代码片段所示的输出。简而言之,如果 if 语句中的条件为真,则 continue 跳过输出的打印;如果为假,则 continue 执行打印语句并打印结果。
public class ContinueInWhileLoop {
public static void main(String args[]){
int i=1;
while (i<=15)
{
if (i%2!=0)
{
i++;
continue;
}
System.out.print(i+" ");
i++;
}
}
}
输出
2 4 6 8 10 12 14
public class ContinueInDoWhileLoop {
public static void main(String args[]){
int i=1;
do
{
if (i%2!=0)
{
i++;
continue;
}
System.out.print(i+" ");
i++;
}while (i<=15);
}
}
输出
2 4 6 8 10 12 14
另一种在 java 中工作得很好的 continue,尤其是在处理嵌套循环时,是带标签的 continue 语句。带标签的 continue 语句的语法如下
continue label;
带标签的 continue 语句总是与嵌套循环一起使用。原因很清楚,当嵌套深度很高时,程序的复杂性就高,执行时间也相对较长。要跳过特定外层循环的执行,最简单方便的方法是将外层循环与一个标签绑定,并与 continue 语句一起使用。请看下面的例子
class LabelledContinueInForLoop {
public static void main(String[] args) {
Outer:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i == 2 ||j==3 ) {
continue Outer ;
}
System.out.printf("i = %d, j = %d%n", i, j);
}
}
System.out.println("Exited from label");
}
}
输出
i = 1, j = 1 i = 1, j = 2 i = 3, j = 1 i = 3, j = 2
在这个嵌套循环中,我们将 i 和 j 的值初始化为 1,并且 i 和 j 的限制都设置为 3。
for 循环检查 i 的值是否小于或等于 3。由于 1<3,循环内的代码将执行,我们会遇到另一个 for 循环。同样,for 循环检查 j 的值是否小于或等于 3。这里也是 1<3,所以内层循环中的代码执行,其中 if 语句被求值。这里 1 不等于 2 或 1 不等于 3,因此 if 语句为 false,所以控制权转移到 if 的外部语句,并打印 i 的值为 1 和 j 的值为 1。然后当它经过 j++ 时,j 的值从 1 递增到 2。
现在内层循环以 j 的值为 2 继续执行,for 循环再次检查 2<3。然后控制权转移到 if 语句,检查 2 是否等于 3,结果为 false,因此输出了结果。之后 j 的值再次递增到 3,当它经过 j++ 时。
这个周期有点不同,这里 j 的值是 3。尽管 for 循环的计算结果为 true,但它不满足 if 语句中提供的条件,因此 if 语句内的代码会执行,也就是 continue 语句。这意味着当前的执行被跳过,并移动到下一次,其中 j 的值递增到 4。
现在 i 的值被递增到 2,因为内层循环超过了限制。同样的过程继续进行,直到两个 for 循环都退出。现在自己尝试其他周期,以便更好地理解这一点。
Java 中最后的分支或跳转语句是 return。像 break 和 continue 一样,return 也是 Java 中的一个保留关键字,用于控制执行流程。return 语句通常与方法一起出现,它会从当前方法退出,并将控制流转移到调用它的方法。return 语句可以以两种方式使用
不返回值的 return 语句的语法如下
return;
返回值的 return 语句的语法如下
return sum;
请看下面的例子来验证 return 语句的工作方式
public class Calc {
int Add(int a,int b)
{
int sum = a+b;
return sum;
}
void Mul(int a,int b)
{
int prod = a*b;
System.out.printf("Product = %d\n",prod);
return;
}
public static void main(String[] args) {
Calc c =new Calc();
System.out.printf("Sum = %d\n",c.Add(10, 20));
c.Mul(30,40);
}
在这个例子中,我们有一个名为 Calc 的类,它包含两个方法:一个是 Add() 用于做加法,另一个是 Mult() 用于求两个数的乘积。考虑到 return 语句,Add() 方法向 main 方法返回一个值,而 Mul() 方法不返回任何值。
如果您仔细观察,您会发现方法的数据类型必须与该方法返回的值的类型相同。在第一种情况下,Add() 方法返回一个整数,因此方法的数据类型也是 int。类似地,在下一种情况下,方法不返回任何值,因此该方法被分配了一个 void 数据类型。您将在我们即将推出的教程中学习更多关于类和方法的知识。