Java中main的变量范围?

时间:2014-01-13 01:38:22

标签: java syntax scope

我是否认为main()中的块没有单独的范围?

例如,如果我执行以下操作,我将收到编译错误:

static int i = 1;

public static void main(String[] args) {
   int i = 2;

   { 
      int i = 3; 
   }
}

为什么会这样?

2 个答案:

答案 0 :(得分:1)

当我尝试编译时,我收到此消息:

error: variable i is already defined in method main(String[])

这意味着static int i = 1;不会导致错误。 i中的第一个main的范围是针对整个main的,所以当您尝试创建另一个时,在代码块中,您会收到错误。

请注意,如果您在块中声明了i

public static void main(String[] args){
    {
        int i = 2;
    }
    {
        int i = 3;
    }
}

您没有收到编译错误(请参阅here)。

可以通过以下两种方式之一访问static intthis.i(不推荐)或ClassName.i(建议用于访问静态变量)

答案 1 :(得分:0)

Java不允许混淆堆栈(即局部变量)。您可以对实例或类变量进行模糊处理,因为还有其他方法可以访问它们(例如,例如this.i,或者静态的MainClass.i)。