请不要担心循环,但我的问题是关于这些关键字:outer,middle,和inner.他们不声明为实例变量,为什么IDE让代码编译?我在google上做了一些搜索,是这个java标签吗?Java中的某种关键字?多谢你们.
public class LoopTest{
public static void main(String[] args){
int counter = 0;
outer:
for(int i = 0; i < 3; i++){
middle:
for(int j = 0; j < 3; j++){
inner:
for(int k = 0; k < 3; k++){{
}
if(k - j > 0){
break middle;
}
counter++;
}
}
}
System.out.println(counter);
}
Run Code Online (Sandbox Code Playgroud)
}
was*_*ren 11
Java支持标签.Oracle的这篇文章对此进行了描述.
所以,基本上你可以有带标签的循环,你可以使用关键字continue,break依此类推来控制循环的流程.
以下示例说明了如何将循环与break关键字一起使用.当break被调用其终止标记语句即以下的语句someLabel
someLabel:
for (i = 0; i < 100; i++) {
for (j = 0; j < 100; j++) {
if (i % 20 == 0) {
break someLabel;
}
}
}
Run Code Online (Sandbox Code Playgroud)
该continue关键字处理标签的方法.当您调用时continue someLabel;,外循环将继续.
由于按照该SO-问题,你也可以做结构是这样的:
BlockSegment:
if (conditionIsTrue) {
doSomeProcessing ();
if (resultOfProcessingIsFalse()) break BlockSegment;
otherwiseDoSomeMoreProcessing();
// These lines get skipped if the break statement
// above gets executed
}
// This is where you resume execution after the break
anotherStatement();
Run Code Online (Sandbox Code Playgroud)
就个人而言,我绝不会建议使用标签.相反,如果您重新排列代码以便不需要标签(例如,将复杂代码分解为更小的函数),我发现代码更容易理解.
在Java早期,有一个goto运营商.有一天,詹姆斯戈斯林决定将其删除.但是,事实证明仍然允许你使用goto内部循环.那怎么做?好吧,使用命名循环(也称为标记循环),您可以拥有突破循环的所有优点,而不会受到goto意外代码的限制.
所以命名为循环变成了东西,break并continue允许中断或继续比它们的直接父以外的循环.