首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >do-while循环的作用域?

do-while循环的作用域?
EN

Stack Overflow用户
提问于 2011-11-10 01:13:18
回答 8查看 5.8K关注 0票数 14

在Java中,do-while循环体和循环条件不属于同一个作用域。所以下面的代码不会被编译:

代码语言:javascript
复制
do {
    boolean b = false;
} while (b); // b cannot be resolved to a variable

但是这段代码对我来说是有意义的。

此外,如果主体和条件在同一个作用域中,我也找不到任何缺陷;由于主体总是会被执行,而Java没有Goto,我不知道如何跳过最外层的do-while主体作用域中的变量声明。即使有可能,编译器也总是可以检测到这种可能性,然后产生编译时错误。

这种行为有什么原因(除了让do-while循环保持与while相同的格式之外)?我真的很好奇。感谢您的任何投入!

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-11-10 01:19:29

因为这是在Java语言中定义作用域的一种方式;在{}内部是一个新的作用域。

在特殊情况下,如果是单个结构,就没有多大意义。

票数 10
EN

Stack Overflow用户

发布于 2011-11-10 01:20:33

按照您的逻辑,在第一次使用之前不会定义b

代码语言:javascript
复制
do {
    continue;
    boolean b = false;
} while (b); // b cannot be resolved to a variable

请注意,boolean标志通常是一种代码气味,尽量避免它们,而不是与它们发生冲突。

票数 16
EN

Stack Overflow用户

发布于 2011-11-10 01:18:40

在您的示例中,布尔变量b的作用域为do..while循环体。由于条件检查是在正文之外执行的,因此该变量超出了范围。正确的结构应该是:

代码语言:javascript
复制
boolean b = false ; // Or whichever initial value you want
do {
    b = false;
} while (b);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8068814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档