我知道变量范围由块的开头和块{
的结尾包围}
。如果在块中声明了相同的变量,Variable already defined
则会发生编译错误。但是看看下面的例子。
public class Test{
int x=0;// Class scope variable
public void m(){
int x=9; //redeclaration of x is valid within the scope of same x.
if(true){
int x=7; // but this redeclaration generates a compile time error.
}
}
在这里,x
可以在方法中重新声明,尽管它已经在类中声明。但在if
街区里,x
不能重新声明。
为什么重新声明类范围变量不会产生错误,但重新声明方法范围变量会产生错误?