【问题标题】:Why is the using of 'this' keyword necessary?为什么需要使用“this”关键字?
【发布时间】:2014-02-20 07:40:20
【问题描述】:

'this' 用于访问当前正在使用的对象。与传递对象本身相比,它有什么优势,因为该方法无论如何都会访问正在传递的当前对象。

【问题讨论】:

  • 请添加描述源代码的任何具体问题情况。
  • 这用于访问当前类变量或方法。用于区分实例变量和局部变量。

标签: java methods parameter-passing this


【解决方案1】:

它在很多情况下都有帮助。最明显的是在构造函数中,当参数名称与实例变量相同时:

public final class Foo
{
    private final int bar;

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

【讨论】:

    【解决方案2】:

    this 关键字可以有很多用法。在 java 中,这是一个引用变量,它引用当前对象。 this关键字的使用

    这里给出了this关键字的6种用法。

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

    阅读更多关于this Keywork的信息

    【讨论】:

    • 如果这个答案是基于像this one这样的文章,你应该包括它的信息。
    【解决方案3】:

    与传递对象本身相比,它有什么优势? 方法将访问正在传递的当前对象 无论如何。

    根据您关于使用this 关键字的优势的问题传递对象本身this 是Java 中的final 变量,而传递时的对象可能是也可能不是@ 987654324@。作为一个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*/ }

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

    希希尔

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          如果我理解正确,你想做的事

          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 所做的。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-10-31
            • 2019-09-05
            • 2020-05-20
            • 2014-05-29
            • 2016-07-27
            • 1970-01-01
            • 2012-01-30
            • 2014-03-14
            相关资源
            最近更新 更多