下面的方法无法正常工作,因为内部块声明了与外部块中相同名称的变量。显然,变量属于它们被声明的方法或类,而不是它们被声明的块,因此我无法编写一个短小的临时块进行调试,该临时块会将外部作用域中的变量暂时覆盖:
void methodName() {
int i = 7;
for (int j = 0; j < 10; j++) {
int i = j * 2;
}
}
我使用的几乎每种块级作用域语言都支持此功能,包括我在学校为解释器和编译器编写的一些简单的小语言。Perl、Scheme、甚至C都可以做到这一点。甚至PL/SQL也支持此功能!
那么Java为什么要做出这个设计决策呢?
编辑:正如有人指出的那样,Java确实具有块级作用域。那么我所问的概念名称是什么?我希望我能记得更多关于语言设计的课程。