Java标签?外,中,内

OPK*_*OPK 4 java

请不要担心循环,但我的问题是关于这些关键字: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)

就个人而言,我绝不会建议使用标签.相反,如果您重新排列代码以便不需要标签(例如,将复杂代码分解为更小的函数),我发现代码更容易理解.


cor*_*iKa 5

在Java早期,有一个goto运营商.有一天,詹姆斯戈斯林决定将其删除.但是,事实证明仍然允许你使用goto内部循环.那怎么做?好吧,使用命名循环(也称为标记循环),您可以拥有突破循环的所有优点,而不会受到goto意外代码的限制.

所以命名为循环变成了东西,breakcontinue允许中断或继续比它们的直接父以外的循环.