执行时循环的范围?

2022-09-03 18:05:36

在 Java 中,循环的主体和循环条件不属于同一作用域。因此,以下代码将无法编译:do-while

do {
    boolean b = false;
} while (b); // b cannot be resolved to a variable

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

此外,如果身体和条件处于同一范围内,我找不到任何陷阱;由于主体将始终被执行,而Java没有,我不知道如何跳过最外层主体作用域中的变量声明。即使有可能,编译器也始终可以检测到这种可能性,然后产生编译时错误。Gotodo-while

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


答案 1

按照您的逻辑,在首次使用之前不会定义这种情况:b

do {
    continue;
    boolean b = false;
} while (b); // b cannot be resolved to a variable

请注意,标志通常是一种代码气味,尽量避免它们,而不是与它们作斗争。boolean


答案 2

因为这是在Java中定义范围的一种方式;里面是一个新的范围。{}

IMO 将单个构造特殊化没有多大意义。