Java 中的分支语句


2022年1月5日, Learn eTutorial
1916

在本教程中,您将通过简单的示例掌握 Java 中所有关于分支语句的知识,例如 break、continue 和 return。此外,您还将了解带标签和不带标签的控制语句是如何工作的。到目前为止,我们已经学习了一些 Java 中的基本程序,通过分析这些程序,我们知道每个程序都遵循线性执行,即一个语句接一个语句地执行。但在某些情况下,程序员希望根据某些逻辑条件将控制权引导到某些其他语句部分,而不是最近的语句。在这种情况下,程序员依赖于分支语句,如 break、continuereturn。break 和 continue 语句可以与标签绑定,也可以不带标签。

JAVA BREAK 语句

在 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 语句

无标签 break 语句在循环中的工作方式

无标签 break 语句通常会终止 break 语句所在的循环。break 语句主要与循环中的 if 语句和 switch case 一起使用。首先,我们可以看看 break 语句在循环中是如何工作的,以中断循环控制。

 

  1. For 循环中的无标签 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 相关的内层循环。

  2. While 循环中的无标签 Break 语句 - 示例
    
    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
    
  3. Do While 循环中的无标签 Break 语句 - 示例

    同样,我们可以在 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 语句的语法如下


 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 语句

在JAVA语言中用于控制执行的另一个重要关键字是 continue,它会跳过部分执行并继续执行其余部分。continue 语句总是伴随着决策语句,如 if、if...else 等。与 break 不同,continue 语句从不结束循环的执行;相反,它会跳过满足特定条件的部分的执行,并继续执行循环的剩余部分。continue 语句的语法如下所示,非常简单


 continue; 
 

与 break 一样,我们可以将 continue 分为两种形式:无标签 Continue 和有标签 Continue。

无标签 continue 语句在循环中的工作方式

在这种情况下,当 if 语句中指定的条件返回 true 时,写在 'continue' 之后的代码块将不会执行。控制权会转移回下一次迭代,并且剩余的执行将继续进行,直到循环退出。

这是一个打印 1 到 15 之间偶数的示例程序,循环将是这样的

  1. For 循环中的 Continue 语句 - 示例

    假设我们想打印 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 执行打印语句并打印结果。

  2. while 循环中的 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 
    
  3. do-while 循环中的 Continue 语句 - 示例
    
    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 
    

带标签的 continue 语句在循环中的工作方式

另一种在 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,并且 ij 的限制都设置为 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 语句

Java 中最后的分支或跳转语句是 return。像 break 和 continue 一样,return 也是 Java 中的一个保留关键字,用于控制执行流程。return 语句通常与方法一起出现,它会从当前方法退出,并将控制流转移到调用它的方法。return 语句可以以两种方式使用

  1. 无返回值
  2. 有返回值

不返回值的 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 数据类型。您将在我们即将推出的教程中学习更多关于类和方法的知识。