为什么需要使用'this'关键字?

时间:2014-02-20 07:40:21

标签: java methods parameter-passing this

'this'用于访问正在使用的当前对象。它传递对象本身有什么优势,因为该方法将访问当前正在传递的对象。

6 个答案:

答案 0 :(得分:3)

this关键字可能会被大量使用。在java中,这是一个引用当前对象的引用变量。 使用this关键字

以下是this关键字的使用情况。

  1. 此关键字可用于引用当前的类实例变量。
  2. this()可用于调用当前的类构造函数。
  3. 此关键字可用于调用当前类方法(隐式)
  4. 这可以在方法调用中作为参数传递。
  5. 这可以在构造函数调用中作为参数传递。
  6. 此关键字也可用于返回当前的类实例。
  7. 详细了解this Keywork

答案 1 :(得分:2)

在许多情况下它可以提供帮助。当参数名称与实例变量相同时,最明显的是构造函数:

public final class Foo
{
    private final int bar;

    public Foo(final int bar)
    {
        this.bar = bar; // MUST specify "this" here
    }
}

答案 2 :(得分:1)

this很少有必要 - 如果我没记错的话,只有当你有一个与局部变量同名的字段并且你想明确指定你要访问该字段而不是局部变量时

答案 3 :(得分:0)

this用于访问当前的班级variablemethods。用于区分实例变量(ivars)和局部变量。

答案 4 :(得分:0)

  

自从传递对象本身以来,它有什么优势呢?   方法将访问正在传递的当前对象   反正。

根据您关于使用this关键字优于传递对象本身的优势的问题this是Java中的final变量,而传递的对象是可能是也可能不是final。作为final变量,我可以清楚地看到使用this优于传递对象本身的两个主要优点。

  1. 无法将任何新值分配给this的当前实例。

    this = new Foo(); //compilation error; cannot assign value to final variable : this

  2. 可以在同步块中使用。

    synchronized(this){       /*this synchronized block will be locked on current instance*/ }

  3. 除了在问题中设置的这个上下文之外,在Java中使用this有许多优点,你可以从其他答案中找出答案。

    Shishir

答案 5 :(得分:0)

如果我理解正确,你想做

static void f(MyClass self) { 
    // access current class object using self
}

而不是

void f() {
    // access current class object using this
}

以这种方式调用方法

MyClass.f(instance);

取而代之的是

instance.f();

虽然这实际上是可行的,但如果需要访问它,则总是必须将当前对象作为参数传递。为什么不将对象隐式传递给非静态方法?这就是java所做的。

当您查看构造函数时,您会注意到无法将当前类对象传递给它,因为在调用构造函数之前该对象不存在。因此,您无法访问构造函数中的当前类对象。