java循环控制中break、continue、return的比较

本文详细介绍了Java中的三种流程控制语句:break、continue和return。包括它们的基本用法、在循环及嵌套循环中的表现,以及如何利用标签来增强控制流程的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、break

在Java 中,break语句有3种作用。
  • 第一,在switch语句中,它被用来终止一个语句序列。

        在switch语句中,break用来终止一个语句序列,其实根据第二条,switch本身就是一个循环体,所以break在switch中作用也是强制退出一层循环,退出一个循环体。
  • 第二,它能被用来强制退出一个循环体,在多个循环嵌套中,break只退出当前所在的一层循环体。

        首先确定一下嵌套循环中的一层循环的概念,如下为3层循环, 每一层中的break语句强制退出当前所在的循环层
        for(;;){            //第一层循环
 
             if( 1 < 2){ break;}
 
             for(;;){       //第二层循环  
 
                 if( 2 < 3){ break;}
 
                 for(;;){   //第三层循环
 
                     if( 3 < 4){ break;}
 
                }
            }
 
        }
 
  • 第三,它能作为一种“先进”goto 语句来使用,带标签的break。

       这种情况下的break跟goto的关系是:吸收goto语句的精华,舍弃goto语句的糟粕,首先break功能使得程序退出当前循环层,然后确认标签并返回到标签处。
  • 标签格式为“label:”,比如带“:”;
  • 被加标签代码块必须包围break 语句;
  • 被加标签的代码块可以是任何代码块(保证有break语句即可),即break不止可以退出循环;
        boolean t = true;
        first : {
            second : {
                third : {
                    System.out.println( "Before the break.");
 
                     if(t) break second; // break out of second block
 
                    System.out.println( "This won't execute");
                }
                System.out.println( "This won't execute");
            }
            System.out.println( "This is after second block.");
        }
运行该程序,产生如下输出:
Before the break. This is after second block.
 

二、continue

  • continue——作用是忽略continue后面剩余循环体语句,然后继续执行本层循环的条件表达式,执行下一次循环;
  • 带标签continue——continue也有标签功能,类似break的功能,即 “continue + 标签  =  break”;
         //不带标签的continue
         for( int i = 0; i < 10; i ++) {
            System.out.print(i + " ");
             if (i % 2 == 0)
                continue;
            System.out.println( "");
        }
 
         //带标签的continue
        outer :
         for ( int i = 0; i < 10; i ++) {
 
             for( int j = 0; j < 10; j ++) {
 
                 if(j > i) {
 
                    System.out.println();
                     continue outer;   //返回到标签处,退出
//                    break;
                }
                System.out.print( " " + (i * j));
            }
        }
带标签的输出结果:
0
0 1
0 2 4
0 3 6 9
0 4 8 12 16
0 5 10 15 20 25
0 6 12 18 24 30 36
0 7 14 21 28 35 42 49
0 8 16 24 32 40 48 56 64
0 9 18 27 36 45 54 63 72 81
 
验证“ continue + 标签  =  break”,把语句中“ continue outer; ”注释掉,换成“break”,输出结果如下:
0
0 1
0 2 4
0 3 6 9
0 4 8 12 16
0 5 10 15 20 25
0 6 12 18 24 30 36
0 7 14 21 28 35 42 49
0 8 16 24 32 40 48 56 64
0 9 18 27 36 45 54 63 72 81
即等式成立!即continue标签的作用是找到循环体入口,继续下一次循环!
 

三、return

  • return明确地从一个方法返回,即返回到调用该方法入口
测试1:
public static void main( String[] args )
    {
        App ap = new App();
        ap.breakTest();
    }
 
     public void breakTest(){
 
         //不带标签的continue
         for( int i = 0; i < 10; i ++) {
            System.out.print(i + " ");
             if (i % 2 == 0)
                continue;
            System.out.println( "");
        }
 
         //带标签的continue
        outer :
         for ( int i = 0; i < 10; i ++) {
 
             for( int j = 0; j < 10; j ++) {
 
                 if(j > i) {
 
                    System.out.println();
                     continue outer;   //返回到标签处,退出
                }
                System.out.print( " " + (i * j));
            }
        }
    }
输出结果:
0 1
2 3
4 5
6 7
8 9
0
0 1
0 2 4
0 3 6 9
0 4 8 12 16
0 5 10 15 20 25
0 6 12 18 24 30 36
0 7 14 21 28 35 42 49
0 8 16 24 32 40 48 56 64
0 9 18 27 36 45 54 63 72 81
测试2,更换continue outer; 为return:
     public static void main( String[] args )
    {
        App ap = new App();
        ap.breakTest();
    }
 
     public void breakTest(){
 
         //不带标签的continue
         for( int i = 0; i < 10; i ++) {
            System.out.print(i + " ");
             if (i % 2 == 0)
                continue;
            System.out.println( "");
        }
 
         //带标签的continue
        outer :
         for ( int i = 0; i < 10; i ++) {
 
             for( int j = 0; j < 10; j ++) {
 
                 if(j > i) {
 
                    System.out.println();
//                    continue outer;  //返回到标签处,退出
                     return;
                }
                System.out.print( " " + (i * j));
            }
        }
    }
测试结果:
0 1
2 3
4 5
6 7
8 9
0
测试3, 更换第一个for循环中的continue为return
public static void main( String[] args )
    {
        App ap = new App();
        ap.breakTest();
    }
 
     public void breakTest(){
 
         //不带标签的continue
         for( int i = 0; i < 10; i ++) {
            System.out.print(i + " ");
             if (i % 2 == 0)
//               continue;
                 return;
            System.out.println( "");
        }
 
         //带标签的continue
        outer :
         for ( int i = 0; i < 10; i ++) {
 
             for( int j = 0; j < 10; j ++) {
 
                 if(j > i) {
 
                    System.out.println();
//                    continue outer;  //返回到标签处,退出
                     return;
                }
                System.out.print( " " + (i * j));
            }
        }
    }
测试结果:
0
当遇到第一个return时,没有再继续往下运行,直接返回到了方法入口!
 
 
 
 
 
 
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值