在java中使用关键字“this”

时间:2009-02-23 13:11:58

标签: java keyword

我试图了解java关键字this实际上做了什么。 我一直在阅读Sun的文档,但我对this实际做的事情仍然很模糊。

12 个答案:

答案 0 :(得分:38)

this关键字是对当前对象的引用。

class Foo
{
    private int bar;

    public Foo(int bar)
    {
        // the "this" keyword allows you to specify that
        // you mean "this type" and reference the members
        // of this type - in this instance it is allowing
        // you to disambiguate between the private member
        // "bar" and the parameter "bar" passed into the
        // constructor
        this.bar = bar;
    }
}

考虑它的另一种方式是this关键字就像你用来引用自己的人称代词。其他语言对于相同的概念有不同的词。 VB使用Me和Python约定(因为Python不使用关键字,只是每个方法的隐式参数)是使用self

如果您要引用本质上属于您的对象,您可以这样说:

  

我的手臂或我的

this视为某种类型说“我的”的方式。因此,伪代码表示如下所示:

class Foo
{
    private int bar;

    public Foo(int bar)
    {
        my.bar = bar;
    }
}

答案 1 :(得分:21)

关键字this在不同的情境中可能意味着不同的东西,这可能是您混淆的根源。

它可以用作对象引用,引用调用当前方法的实例:return this;

它可以用作对象引用,它引用当前构造函数正在创建的实例,例如访问隐藏字段:

MyClass(String name)
{
    this.name = name;
}

它可用于从构造函数中调用类的不同构造函数:

MyClass()
{
    this("default name");
}

它可用于从嵌套类中访问封闭实例:

public class MyClass
{
    String name;

    public class MyClass
    {
        String name;

        public String getOuterName()
        {
            return MyClass.this.name;
        }
    }
}

答案 2 :(得分:6)

“this”是对当前对象的引用。

查看详情here

答案 3 :(得分:5)

The keyword this is a reference to the current object。最好用以下代码解释:

public class MyClass {

    public void testingThis() 
    {
        // You can access the stuff below by 
        // using this (although this is not mandatory)

        System.out.println(this.myInt);
        System.out.println(this.myStringMethod());

        // Will print out:
        // 100
        // Hello World
    }

    int myInt = 100;
    string myStringMethod() 
    {
        return "Hello World";
    }

}

除非您的代码标准告诉您使用this关键字,否则不会使用它。它有一个常见用途,那就是如果你遵循代码约定,你的参数名称与你的类属性相同:

public class ProperExample {
    private int numberOfExamples;

    public ProperExample(int numberOfExamples) 
    {
        this.numberOfExamples = numberOfExamples;
    }
}

this关键字的一个正确用法是链构造函数(使构造对象在构造函数中保持一致):

public class Square {
    public Square() 
    {
        this(0, 0);
    }

    public Square(int x_and_y) 
    {
        this(x_and_y, x_and_y);
    }

    public Square(int x, int y)
    {
       // finally do something with x and y
    }
}

此关键字的工作方式与例如C#。

答案 4 :(得分:4)

更好地利用这个

public class Blah implements Foo {

   public Foo getFoo() {
      return this;
   }
}

它允许您在当前上下文中具体使用“this”对象。另一个例子:

public class Blah {

   public void process(Foo foo) { 
      foo.setBar(this);
   }
}

你怎么能做这些操作呢。

答案 5 :(得分:2)

“this”关键字引用当前对象,因为该方法正在执行。它还用于避免在实例变量和局部变量具有相同名称时,作为方法中的参数传递的局部变量与实例变量之间存在歧义。

示例::

public class ThisDemo1 
{
    public static void main(String[] args) 
   {
        A a1=new A(4,5);       
   }
}

class A
{
    int num1;
    int num2;

    A(int num1)
    {
        this.num1=num1; //here "this" refers to instance variable num1. 
       //"this" avoids ambigutiy between local variable "num1" & instance variable "num1"

        System.out.println("num1 :: "+(this.num1));
    }

    A(int num, int num2)
    {
        this(num); //here "this" calls 1 argument constructor within the same class.
        this.num2=num2;
        System.out.println("num2 :: "+(this.num2)); 
       //Above line prints value of the instance variable num2.
    }
}

答案 6 :(得分:1)

关键字“ this ”指的是当前对象的上下文。在许多情况下(如Andrew指出的那样),您将使用显式 this 来明确表示您正在引用当前对象。

此外,来自“this and super”:

*还有其他用途。有时,在编写实例方法时,需要将包含该方法的对象作为实际参数传递给子例程。在这种情况下,您可以将其用作实际参数。例如,如果要打印出对象的字符串表示形式,可以说“System.out.println(this);”。或者,您可以将此值赋给赋值语句中的另一个变量。

事实上,除了更改其值之外,您可以对任何其他变量执行此操作。*

该网站还引用了“ super ”的相关概念,这可能有助于理解这些概念如何与继承一起工作。

答案 7 :(得分:1)

它是同一类方法中类的实际实例的引用。 编码

public class A{
    int attr=10;

    public int calc(){
     return this.getA()+10;
   }
   /**
   *get and set
   **/    

}//end class A

calc()主体中,软件在当前分配的对象内运行一个方法。

对象的行为如何才能看到自己?完全使用 关键字。

实际上,关键字不需要强制使用(如 super ),因为JVM知道在内存区域中调用方法的位置,但在我看来,这使得代码更具有可重复性。

答案 8 :(得分:1)

它也可以是访问当前上下文信息的一种方法。 例如:

public class OuterClass
{
  public static void main(String[] args)
  {
    OuterClass oc = new OuterClass();
  }

  OuterClass()
  {
    InnerClass ic = new InnerClass(this);
  }

  class InnerClass
  {
    InnerClass(OuterClass oc)
    {
      System.out.println("Enclosing class: " + oc + " / " + oc.getClass());
      System.out.println("This class: " + this + " / " + this.getClass());
      System.out.println("Parent of this class: " + this.getClass().getEnclosingClass());
      System.out.println("Other way to parent: " + OuterClass.this);
    }
  }
}

答案 9 :(得分:0)

用英语来思考,“这个对象”是你现在拥有的对象。

WindowMaker foo = new WindowMaker(this);

例如,您当前位于从JFrame扩展的类中,并且您希望将引用传递给JFrame的WindowMaker对象,以便它可以与JFrame交互。您可以通过将其引用传递给名为“this”的对象来传递对JFrame的引用。

答案 10 :(得分:0)

每个对象都可以使用关键字this访问自身的引用(有时称为this 参考)。

首先让我们来看看代码

public class Employee  {

private int empId;
private String name;

public int getEmpId() {
    return this.empId;
}

public String getName() {
    return this.name;
}

public void setEmpId(int empId) {
    this.empId = empId;
}

public void setName(String name) {
    this.name = name;
}

}

在上面的方法中,getName()返回实例变量名。 现在让我们再看看类似代码

public class Employee  {

private int empId;
private String name;

public int getEmpId() {
    return this.empId;
}

public String getName() {

    String name="Yasir Shabbir";
    return name;
}

public void setEmpId(int empId) {
    this.empId = empId;
}

public void setName(String name) {
    this.name = name;
}


public static void main(String []args){
    Employee e=new Employee();
    e.setName("Programmer of UOS");

    System.out.println(e.getName());

}

}

<强>输出 Yasir Shabbir

  • 此运算符始终使用实例变量(属于对象) 不是任何类变量(属于类)
  • 这总是指类非静态属性而不是任何其他参数或局部变量。
  • 这总是用于非静态方法
  • 此运算符无法处理静态变量(类变量)

**注意:**当方法包含具有的参数或局部变量时,通常会出现逻辑错误 与该类字段的名称相同。在这种情况下,如果您想访问,请使用引用 类的字段 - 否则,将引用方法参数或局部变量。

答案 11 :(得分:0)

  

'这个'的作用非常简单。它掌握了当前的参考   对象

  • 此关键字包含当前类
  • 实例的引用
  • 此关键字不能在静态功能或静态块内使用
  • 此关键字可用于访问实例
  • 的阴影变量
  • 此关键字可用于将当前对象作为函数调用中的参数传递
  • 此关键字可用于创建构造函数链

来源:http://javaandme.com/core-java/this-word