Java中的2个不同的do-while循环结构?

时间:2016-01-14 10:24:03

标签: java do-while

注意:请参见底部编辑!

我总是只知道Java中的do-while循环:

do {

} while(condition);

今天,在准备Oracle认证Java考试时,我很震惊地发现了这一点:

do while (condition) {

}

它编译没有问题。我无法在语言规范中找到构造。有人能指点我参考吗?还有什么区别?为什么有2?

修改

不发布完整代码段并声称某些内容不正确的应用程序!

第二个循环没有编译。这样做:

  do while (true) System.out.println("Got me!");
    while (true);

并查看已接受的答案以解释其原因!

我希望这个问题可以帮助那些陷入同一陷阱的人。

2 个答案:

答案 0 :(得分:3)

do {

} while(condition);

是" do-while"循环,由condition驱动。它编译得很好,do'正文将至少执行 一次。

然而,第二个片段(如果竞争编译,因为你没有),则等于:

do {
   while (condition) {

   }
} while(otherCondition);

我们在while的正文中有一个嵌套的do循环。省略do的正文括号{}会导致混淆。

答案 1 :(得分:0)

实际上这段代码不会被编译,它会给出错误:

error: while expected
        }
         ^
 error: illegal start of expression
}
^
 error: reached end of file while parsing
}
 ^
error: reached end of file while parsing
4 errors

所以这个循环无效,java编译器的工作方式与JLS, ch 14.13中实际描述的一样:

  

do语句重复执行Statement和Expression   直到Expression的值为false。

DoStatement:
    do Statement while ( Expression ) ;