2013-10-09 51 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); 
    } 
}