在Java中,do-while循环体和循环条件不属于同一个作用域。所以下面的代码不会被编译:
do {
boolean b = false;
} while (b); // b cannot be resolved to a variable但是这段代码对我来说是有意义的。
此外,如果主体和条件在同一个作用域中,我也找不到任何缺陷;由于主体总是会被执行,而Java没有Goto,我不知道如何跳过最外层的do-while主体作用域中的变量声明。即使有可能,编译器也总是可以检测到这种可能性,然后产生编译时错误。
这种行为有什么原因(除了让do-while循环保持与while相同的格式之外)?我真的很好奇。感谢您的任何投入!
发布于 2011-11-10 01:19:29
因为这是在Java语言中定义作用域的一种方式;在{}内部是一个新的作用域。
在特殊情况下,如果是单个结构,就没有多大意义。
发布于 2011-11-10 01:20:33
按照您的逻辑,在第一次使用之前不会定义b:
do {
continue;
boolean b = false;
} while (b); // b cannot be resolved to a variable请注意,boolean标志通常是一种代码气味,尽量避免它们,而不是与它们发生冲突。
发布于 2011-11-10 01:18:40
在您的示例中,布尔变量b的作用域为do..while循环体。由于条件检查是在正文之外执行的,因此该变量超出了范围。正确的结构应该是:
boolean b = false ; // Or whichever initial value you want
do {
b = false;
} while (b);https://stackoverflow.com/questions/8068814
复制相似问题