我总是只知道Java中的do-while循环:
do {
} while(condition);
今天,在准备Oracle认证Java考试时,我很震惊地发现了这一点:
do while (condition) {
}
它编译没有问题。我无法在语言规范中找到构造。有人能指点我参考吗?还有什么区别?为什么有2?
不发布完整代码段并声称某些内容不正确的应用程序!
第二个循环没有编译。这样做:
do while (true) System.out.println("Got me!");
while (true);
并查看已接受的答案以解释其原因!
我希望这个问题可以帮助那些陷入同一陷阱的人。
答案 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 ) ;