以下方法不起作用,因为内部 block 声明了一个与外部 block 中的变量同名的变量。显然变量属于声明它们的方法或类,而不属于声明它们的 block ,因此我无法编写一个简短的临时 block 用于调试,它恰好将外部范围中的变量插入阴影只是片刻:
void methodName() {
int i = 7;
for (int j = 0; j < 10; j++) {
int i = j * 2;
}
}
几乎我用过的所有 block 作用域语言都支持这一点,包括我在学校为之编写解释器和编译器的琐碎小语言。 Perl 可以做到这一点,Scheme 也可以,甚至 C。甚至 PL/SQL 也支持这一点!
这个 Java 设计决策的基本原理是什么?
编辑:正如有人指出的那样,Java 确实具有 block 作用域。我要问的概念的名称是什么?我希望我能从那些语言设计类(class)中记住更多。 :)
最佳答案
嗯,严格来说,Java 确实有 block 作用域的变量声明;所以这是一个错误:
void methodName() {
for (int j = 0; j < 10; j++) {
int i = j * 2;
}
System.out.println(i); // error
}
因为 'i' 不存在于 for block 之外。
问题是 Java 不允许您创建与在同一方法的外部 block 中声明的另一个变量同名的变量。正如其他人所说,据说这样做是为了防止难以识别的错误。
关于java - 为什么 Java 没有 block 作用域的变量声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/141140/