没有标签的break语句尝试将控制转移到 最里面的封闭开关,while,do,或for语句 立即封闭方法或初始化程序;
我对这条规则有误解。例如,如果我们编写代码:
public static void main(String[] args) // Immediately enclosing method
{
while(true){ // Innermost enclosing 'while' for the break at LINE 2?
break; // **LINE 2**
}
}
JLS说当我们在LINE 2
时,我们试图将控制转移到最内部封闭while
。做什么的?在LINE 2
时,block-statement
{{1}}已经处于控制状态。
答案 0 :(得分:1)
这意味着如果你有嵌套while循环,那么它将从最里面打破。所以对于例如。
//this is just a sample nonsensical code
int i = 0;
while (true) {
if (i > 100) {
break;
}
while (true) {
if (i < 20) {
System.out.println("Inner while " + i);
i++;
} else {
break;
}
}
System.out.println("Outer while " + i);
i ++;
}
观察输出。因此,当我小于20时,它会从内循环中打印出我的值,但很快当它变为20时,它会从内循环中断并返回到外循环并从外循环开始执行sysout(尽管它在内部但是条件不是得到满意)并且看到当我达到大于100时它从外循环中收支平衡。希望这会有所帮助。
答案 1 :(得分:1)
您需要检查您引用的整个段落(为了清楚起见,我强调了粗体中的句子):
没有标签的
break
语句尝试将控制转移到最里面的封闭开关,while,do或for语句用于立即封闭的方法或初始化器; 此语句称为中断目标,然后立即正常完成。
在您的示例中,控制权转移到while
语句以终止,并继续执行。