标签

在学习C语言的时候讲到过一个 goto 当时老师提醒我们,让我们慎用。最后学习java的时候发现已经没有goto了。

然而在JAVA中也有能实现类似的跳转操作,这与breakcontinue这两个关键词有关。

标签

标签是后面根由冒号的标识符

label:

在JAVA中,标签起作用的唯一的地方刚好是在迭代语句之前。如果想实现一个功能是终止迭代并从头开始这个用标签就特别方便了。

既然同时说道breakcontinue这两个关键词,那他们之间一定有一些联系与区别

label:
outer-interation{
  inner-interation{
     
     break;(1)
     
     continue;(2)

     continue label;(3)
     
     break label;(4)
  }
}
上面的代码是不可以跑的,只是书上的例子

在(1)中,break终断内部循环,继续外部循环;

在(2)中,continue是指后面的代码不执行了,直接到当前(内部)循环的开始处;

在(3)中,continue label 同时终断内部和外部循环,直接跳转到label处,随后从头开始两个循环;

在(4)中,break label 同时终断内部和外部循环,直接跳转到label处,随后不再进入两个循环;


针对for循环的话,有一个递增表达式,如果break了会不会执行了呢?

System.out.println("label1");
label1: 
for (int i = 0; i < 5; i++) 
{
	if (i == 2) {
		continue label1;
	}
	
	System.out.println("i: " + i);

}


输出

label1
i: 0
i: 1
i: 3
i: 4

根据输出结果来看,i=2的哪一步没有输出,也就是说在 continue label1之后的代码没有被执行,直接跳到了label1处,然后重新开始了循环,但是初始化int i = 0这个也没有执行,因为它只执行一次,因为i是从2开始的。


再来看一个例子,证明一下break是会跳过for循环的递增操作的;

int i = 0;
outer:
	for(;true;)
	{
		inner:
			for(; i < 10 ;i++)
			{
				System.out.println("i = " + i);
				if(i == 2)
				{
					System.out.println("continue");
					continue;
				}
				if(i == 3)
				{
					System.out.println("break");
//							i++;
					break;
				}
				
			}
	}

这个的输出是不会用终点的,因为i会永远等于3,永远 break到外层循环,然后再进入内层,一直循环下次,永无止境。所以想要i增长需要自己进行操作。

另:continue label也会跳过for循环的递增步骤




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值