我是否认为main()中的块没有单独的范围?
例如,如果我执行以下操作,我将收到编译错误:
static int i = 1;
public static void main(String[] args) {
int i = 2;
{
int i = 3;
}
}
为什么会这样?
答案 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 int
:this.i
(不推荐)或ClassName.i
(建议用于访问静态变量)
答案 1 :(得分:0)
Java不允许混淆堆栈(即局部变量)。您可以对实例或类变量进行模糊处理,因为还有其他方法可以访问它们(例如,例如this.i,或者静态的MainClass.i)。