为什么不是"这个".这个构造函数需要命令?(Java)的

Dav*_*vid 7 java constructor class

我正在读一本关于java的书.它只是解释了如何创建一个名为"deck"的类,其中包含一组卡作为其实例变量.这是代码snippit:

class Deck { 
    Card[] cards; 
    public Deck (int n) { 
        cards = new Card[n]; 
    } 
} 
Run Code Online (Sandbox Code Playgroud)

为什么不使用this.命令?

例如,为什么不是这个代码:

class Deck { 
    Card[] cards; 
    public Deck (int n) { 
       this.cards = new Card[n];
    }
}
Run Code Online (Sandbox Code Playgroud)

Boz*_*zho 20

因为没有歧义.只有一个cards变量.this如果有两个 - 其中一个是实例变量(类的一部分,当前是),另一个 - 构造函数的参数,则需要它.

顺便说this一下,这不是一个"命令".这是一个"关键字".


Ran*_*pho 12

this. 是隐含的.

一般来说,最好的做法(至少认为是一个)只this在绝对必要时使用.例如,当你有一个名为的局部变量cards和一个名为的成员变量时cards,你需要this.cards引用成员变量,作为cards局部变量的引用.

在这种情况下,这this是一个好主意(尽管重命名成员变量可能是个更好的主意).

在其他情况下,隐式this可以工作,使用它.


Dav*_*eas 8

您无需使用this关键字限定对成员的所有访问权限.只要另一个变量隐藏了成员方法,您就只需要使用它.

这不是一个仅限于构造函数的功能,但在所有方法中都可用:

public class Test 
{
   private int member;
   private int value;
   public Test(int value) {
      member = 5;
      this.value = value; // required to differentiate from the parameter
   }
   public void f( int member ) {
      int value = 5
      this.member = value; // assign local 'value' (5) to member 'member'
      this.value = member; // assign parameter 'member' to member 'value'
   }
}
Run Code Online (Sandbox Code Playgroud)