这个和范围背后的推理(我认为与范围有关)

时间:2013-10-09 02:40:51

标签: java

我是从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());

}

}

既然这样,原谅双关语似乎就是这样,那么在课堂上工作时,重点是什么呢?

2 个答案:

答案 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);
  }
}