我是从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());
}
}
既然这样,原谅双关语似乎就是这样,那么在课堂上工作时,重点是什么呢?
答案 0 :(得分:3)
public Test(String givenName)
{
this.name = givenName;
}
这个。在这种情况下或在get方法中不需要)。它通常在代码如此使用时使用:
public Test(String name)
{
this.name = name;
}
告诉编译器将实例变量(this.name
)设置为局部变量(name
)。
有些人非常清楚他们正在使用实例变量。
答案 1 :(得分: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);
}
}