小编典典

类范围变量与方法范围变量

java

我知道变量作用域由块的开始和块{的结尾包围}。如果在块内声明了相同的变量,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无法重新声明。

为什么类范围变量的重新声明不产生错误,而方法范围变量的重新声明却产生错误?


阅读 165

收藏
2020-11-30

共1个答案

小编典典

这是因为int x=0不是变量,而是实例字段。允许局部变量与字段具有相同的名称。为了区分变量和具有相同名称的字段,我们this在实例字段中使用前缀,在类字段中使用类名。例如

int x = this.x
2020-11-30