【发布时间】:2011-12-25 12:15:59
【问题描述】:
在 Java 中,do-while 循环的主体和循环条件不属于同一范围。所以下面的代码不会编译:
do {
boolean b = false;
} while (b); // b cannot be resolved to a variable
但这段代码对我来说确实有意义。
另外,如果正文和条件在同一范围内,我找不到任何陷阱;因为body总是会被执行,而Java没有Goto,我不知道如何跳过最外层do-while body范围内的变量声明。即使有可能,编译器总能检测到这种可能性,然后产生编译时错误。
这种行为是否有任何原因(除了将do-while 循环保持与while 相同的格式)?我真的很好奇。感谢您的任何意见!
【问题讨论】:
-
我认为这是因为 Java 中的作用域按块
{}. -
Java 中的作用域由大括号清楚地描述。请注意,while(b) 在花括号之外,而布尔值 b 在里面。这将它们置于不同的范围内。
-
你能像在 C/C++ 中那样在 Java 中使用无关的
{}吗? -
(虽然我要补充一点,如果你使用额外的
{}来创建块,你可能做错了,应该重构。)