Break语句突然或正常完成?

时间:2014-10-12 13:33:24

标签: java

JLS 14.15:

  

没有标签的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}}已经处于控制状态。

2 个答案:

答案 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语句以终止,并继续执行。