声明局部var后,实例变量将变为不可见

时间:2010-10-27 17:06:42

标签: java

当你在方法中使用相同的名称和类型声明局部变量时,如实例变量 - 是否意味着实例变量在该方法中变为“不可见”?

public class Test {
 Card card;
 public void foo(){
  Card card = new Card();
  card.test();
 }
}

所以我在foo()方法中声明并实例化局部变量卡。然后为局部变量调用test()方法。如果我删除了Card card = new Card(); test()方法,则调用实例变量。

6 个答案:

答案 0 :(得分:8)

您所看到的有时被称为“遮蔽”变量。每当在内部作用域内声明变量时,该变量就成为与该名称相关的默认变量,直到它超出作用域。

在这种情况下,您可以使用语法

访问类变量
this.card

答案 1 :(得分:7)

实例变量不会变为不可见,但它会被局部变量隐藏。您仍然可以使用this.card访问它。

答案 2 :(得分:1)

您可以使用this.card访问实例变量 this.variable引用将始终为您提供实例变量。如果你有一个与实例变量相同的函数的参数,这可能会很有用,但如果可以的话,我建议尽量避免这个问题。

答案 3 :(得分:1)

是的,本地范围的卡将优先。您可以使用'this'来引用实例变量:

public void foo() {
  Card card = new Card();
  this.card.test(); // tests the instance variable card
  card.test(); // tests the local card
}

答案 4 :(得分:0)

方法中的本地范围变量将优先于具有相同名称的实例变量,除非您使用this关键字将实例变量置于范围内。

答案 5 :(得分:0)

如果要在本地引用实例变量,则必须使用 this