(1) int i = 0;
for (int i = 0; i < 10; ++i) {System.out.println(i);}
(2) int i = 0;
почему после цикла (2) я могу объявить и использовать i, а если попробовать ее
объявить до - (1) - ругается в цикле на already defined.
разве в java видимость *только* на цикл не распространяется ?
Пока, уважаемый. [aslav(at)inbox,ru] [ICQ 120557239] [http://aslav.obninsk.ru]
np: 23 King Kong Down (fun).soundtrack - 13:56 - (51:59 @ 114 kb/s) .
Видимость распространяется на охватывающий (содержащий объявление) блок,
а for - просто частный случай такого блока. Т.е. если в блоке уже
объявлена переменная, то во вложенных в него блоках ее нельзя объявить
еще раз, чтобы она перекрывала видимость как в сях.
// так можно, ибо два разных блока.
{ int i; }
for (int i = ...) { }
// так нельзя.
int i;
{ int i; }
// так тоже нельзя. :)
for (int i = ...) { int i; }
--
0xdeadbeef
Понедельник 15. Октябрь 2006 20:52, you wrote to All:
YB> (1) int i = 0;
YB> for (int i = 0; i < 10; ++i) {System.out.println(i);}
YB> (2) int i = 0;
YB> почему после цикла (2) я могу объявить и использовать i, а если
YB> попробовать ее объявить до - (1) - ругается в цикле на already
YB> defined.
С видимостью у Явы хитрые заморочки - если переменная объявлена _перед_ блоком,
в блоке ее объявить нельзя. Если она объявлена в блоке - после блока объявить
можно. Т.е. вот такая конструкция не прокатывает:
int x;
// еще объявления
{ int x;
// операторы
}
--
С уважением, Michail Shurutov aka Chechen.
jabberID моёфамилиё@jabber.ru e-mail: моёфамилиё@mail.ru