2013-10-09 49 views
0

我來自Python的Java,並認爲this基本上像Python的self ...但這個小代碼混淆了我。在功能上,此代碼:推理和範圍(我認爲與範圍有關)

public class Test { 

    private String name; 
    public Test(String givenName) 
    { 
     this.name = givenName; 
    } 
    public String nameGet() 
    { 
     return this.name; 
    } 
    public static void main(String[] args) 
    { 
     Test example = new Test("Hello Guys"); 
     System.out.println(example.nameGet()); 

    } 

} 

做同樣的事情,因爲這代碼:

public class Test { 

private String name; 
public Test(String givenName) 
{ 
    name = givenName; 
} 
public String nameGet() 
{ 
    return name; 
} 
public static void main(String[] args) 
{ 
    Test example = new Test("Hello Guys"); 
    System.out.println(example.nameGet()); 

} 

}

由於這一點,原諒雙關語,似乎是這種情況,那麼,什麼是在課堂上工作時提到這一點?

回答

3
public Test(String givenName) 
{ 
    this.name = givenName; 
} 

這個。在這種情況下或get方法中不需要)。它通常用於當代碼是這樣的,而不是:

public Test(String name) 
{ 
    this.name = name; 
} 

告訴編譯器的實例變量(this.name)設置爲本地變量(name)。

有些人很清楚他們使用的是實例變量。

+0

所以第一個構造函數正在做什麼呢?由於givenName不是局部變量,發生了什麼? –

+0

給定name是一個局部變量......它是構造函數的一個參數,它的值爲「Hello Guys」代碼在你的例子中給出 – TofuBeer

+1

Doh!OKay,現在我明白了,謝謝! –

2

通常不需要,但在不明確的情況下可能需要。 假設您的構造函數參數被稱爲name,那麼將無法確定您指的是哪個變量。 因此,你將不得不使用:

public class Test { 
    private String name; 
    public Test(String name) { 
    this.name = name; 
    } 
} 

(在一個側面說明,如果你曾經與內部類工作,你已經得到了你使用OuterClass.this名含糊不清:

public class Test { 
    private String name; 
    private class InnerTest { 
    InnerTest(String name) { 
     Test.this.name = name; 
    } 
    } 
    public Test(String name) { 
    new InnerTest(name); 
    } 
}