Java中的范围规则

时间:2011-03-04 22:10:06

标签: java syntax braces

有人可以帮我理解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 个答案:

答案 0 :(得分:6)

想到for循环实际上表示如下:

{
  int i = 0;
  while (i < 10) {
    // your code
    i ++
  }
}

答案 1 :(得分:3)

  

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

是的,情况确实如此。

显然有局部变量声明:

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

另见:

来自语言规范。

答案 2 :(得分:0)

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

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是   经常用来控制循环;   在...中声明它们   初始化表达式限制了它   寿命延长,减少错误。

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