Общие правила в Java - PullRequest
2 голосов
/ 05 марта 2011

Может кто-нибудь помочь мне понять правила определения объема в Java?Это явно недопустимо:

    {
        int i = 0;
        System.out.println(i); // fine, of course
    }
    System.out.println(i); // syntax error

i объявлено в пределах {} и не доступно снаружи.Так что насчёт этого:

    for (int i = 0; i < 10; i++) {
         System.out.println(i); // fine, of course
    }
    System.out.println(i);  // syntax error, same as above.

Я удивлен синтаксической ошибкой здесь.i объявлено во внешней области, но позже оно недоступно.Связано ли оно с областью действия внутреннего блока каким-то специальным правилом для циклов for?Существуют ли другие сценарии, где это может произойти?

Ответы [ 3 ]

6 голосов
/ 05 марта 2011

Представьте, что цикл фактически представлен так:

{
  int i = 0;
  while (i < 10) {
    // your code
    i ++
  }
}
3 голосов
/ 05 марта 2011

Связано ли это с областью внутреннего блока каким-то специальным правилом для циклов for?

Да, это именно тот случай.

Очевидно, есть объявление локальной переменной:

class Some { 
   public void x( int i ) { 
    System.out.println( i ); // valid 
   }
   int j = i; // not valid 
}

См. Также:

Из спецификации языка.

0 голосов
/ 05 марта 2011

Это определенное поведение цикла for в Java.

class ForDemo {
     public static void main(String[] args){
          for(int i=1; i<11; i++){
               System.out.println("Count is: " + i);
          }
     }
}

Обратите внимание, как код объявляет переменная в пределах инициализации выражение. Область действия этой переменной простирается от декларации до конец блока регулируется для заявление, так что его можно использовать в выражения завершения и приращения также. Если переменная, которая контролирует заявление за не нужно снаружи цикла, лучше всего объявить переменная в инициализации выражение. Имена i, j и k являются часто используется для контроля за петлями; объявив их в рамках выражение инициализации ограничивает их срок службы и уменьшает ошибки.

Источник: http://download.oracle.com/javase/tutorial/java/nutsandbolts/for.html

...