2

有人可以帮助我理解 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它是否通过一些特殊的循环规则绑定到内部块范围?还有其他可能发生这种情况的情况吗?

4

3 回答 3

6

想想 for 循环实际上是这样表示的:

{
  int i = 0;
  while (i < 10) {
    // your code
    i ++
  }
}
于 2011-03-04T22:11:54.503 回答
3

它是否通过一些特殊的 for 循环规则绑定到内部块范围?

是的,情况正是如此。

显然有局部变量声明:

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

也可以看看:

从语言规范。

于 2011-03-04T22:12:58.060 回答
0

for它是Java中循环的定义行为。

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

注意代码如何在初始化表达式中声明一个变量。这个变量的范围从它的声明延伸到由 for 语句控制的块的末尾,因此它也可以在终止和增量表达式中使用。如果循环外不需要控制 for 语句的变量,最好在初始化表达式中声明该变量。名称 i、j 和 k 常用于控制 for 循环;在初始化表达式中声明它们会限制它们的寿命并减少错误。

来源:http: //download.oracle.com/javase/tutorial/java/nutsandbolts/for.html

于 2011-03-04T22:15:44.193 回答