Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

область видимости ~

0 views
Skip to first unread message

Yaroslav Bilozor

unread,
Oct 15, 2006, 12:52:31 PM10/15/06
to
Я Вас категорически приветствую!

(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) .

Peter B. Shalimoff

unread,
Oct 15, 2006, 6:03:48 PM10/15/06
to
Yaroslav Bilozor wrote:
> (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 видимость *только* на цикл не распространяется ?

Видимость распространяется на охватывающий (содержащий объявление) блок,
а for - просто частный случай такого блока. Т.е. если в блоке уже
объявлена переменная, то во вложенных в него блоках ее нельзя объявить
еще раз, чтобы она перекрывала видимость как в сях.

// так можно, ибо два разных блока.
{ int i; }
for (int i = ...) { }

// так нельзя.
int i;
{ int i; }

// так тоже нельзя. :)
for (int i = ...) { int i; }

--
0xdeadbeef


Michail Shurutov

unread,
Oct 15, 2006, 7:56:36 PM10/15/06
to
Здравствуйте, о многоуважаемый Yaroslav!

Понедельник 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

0 new messages