El siguiente método no funciona porque el bloque interno declara una variable del mismo nombre que una en el bloque externo. Aparentemente, las variables pertenecen al método o clase en la que se declaran, no al bloque en el que se declaran, por lo que no puedo escribir un pequeño bloque temporal corto para la depuración que sucede al empujar una variable en el ámbito externo hacia sombra sólo por un momento:¿Por qué Java no tiene declaraciones de variables de ámbito de bloque?
void methodName() {
int i = 7;
for (int j = 0; j < 10; j++) {
int i = j * 2;
}
}
casi todos los idiomas del bloque de ámbito que he utilizado alguna vez a favor de este, incluyendo pequeñas lenguas triviales que escribí intérpretes y compiladores en la escuela. Perl puede hacer esto, al igual que Scheme, e incluso C. ¡Incluso PL/SQL lo admite!
¿Cuál es la razón de esta decisión de diseño para Java?
Editar: como alguien señaló, Java tiene un alcance de bloque. ¿Cuál es el nombre para el concepto que estoy preguntando? Ojalá pudiera recordar más de esas clases de diseño de lenguaje. :)
La primera vez que vi esto fue en Exception-handling. Ahí no pensé nada de eso; Simplemente asumí que la implementación lo excluía por alguna razón interna. No fue hasta que noté que afectaba a los bloques simples que realmente comencé a preguntarme "¿por qué?" – skiphoppy