Следующий метод не работает, поскольку внутренний блок объявляет переменную с тем же именем, что и во внешнем блоке. Очевидно, что переменные относятся к методу или классу, в котором они объявлены, а не к блоку, в котором они объявлены, поэтому я не могу написать небольшой небольшой временный блок для отладки, в результате которого переменная во внешней области видимости отключается в тень на мгновение:
void methodName() {
int i = 7;
for (int j = 0; j < 10; j++) {
int i = j * 2;
}
}
Практически все блочные языки, которые я когда-либо использовал, поддерживали это, включая тривиальные маленькие языки, для которых я писал интерпретаторы и компиляторы в школе. Perl может сделать это, как и Scheme, и даже C. Даже PL / SQL поддерживает это!
Каково обоснование этого дизайнерского решения для Java?
Редактировать: как кто-то указал, у Java есть блок-область видимости. Как называется концепция, о которой я спрашиваю? Хотел бы я вспомнить больше из этих уроков языкового дизайна. :)