当前位置:  开发笔记 > 编程语言 > 正文

在Java中使用"this"

如何解决《在Java中使用"this"》经验,为你挑选了5个好方法。

如果我写下面的课程:

public class Example {

      int j;
      int k;

      public Example(int j, int k) {
           j = j;
           k = k;
      }

      public static void main(String[] args) {
           Example exm = new Example(1,2);
           System.out.println(exm.j);
           System.out.println(exm.k);
      }

}

程序编译,但是当我运行程序时,main方法将打印出两个0.我知道为了说我想在构造函数中初始化实例变量,我必须写:

this.j = j;
this.k = k;

但是如果我不写它,那么在构造函数中(在表达式的左侧和写入侧)评估(或考虑)哪个变量?是参数还是实例变量?这有什么不同吗?

是否存在使用this强制性的其他情况?



1> Srikanth..:

如果你没有在构造函数中写"this.variable",并且你有一个局部变量(包括函数参数)与构造函数中的字段变量同名,那么将考虑局部变量; 局部变量遮蔽了字段(也就是类变量).

一个"这个"是唯一的出路:

class OuterClass {
  int field;

  class InnerClass {
    int field;

    void modifyOuterClassField()
    {
      this.field = 10; // Modifies the field variable of "InnerClass"
      OuterClass.this.field = 20; // Modifies the field variable of "OuterClass",
                                  // and this weird syntax is the only way.
    }
  }
}



2> Joachim Saue..:

如果你只是j在构造函数中说,那么编译器会认为你的意思是两种情况下的参数.所以

j = j;

简单地将参数的值赋给j参数j(这是一个非常毫无意义但仍然有效的语句).

因此,为了消除歧义,您可以使用前缀this.来表明您的意思是具有相同名称的成员变量.

另一种用法this是当你需要将对当前对象的引用传递给某个方法时,例如:

someObject.addEventListener(this);

在此示例中,您需要将当前对象作为一个整体引用(而不仅仅是对象的成员).



3> Robert Grant..:

如果你不写这个,那么你将参数分配给自己; 参数变量影响实例变量.



4> Emiliano..:

当您想要返回对象本身时,这非常有用

return this;

这很有用,因为如果一个类有例如Method1()和Method2(),两者都返回这个,你可以编写像这样的调用

object.Method1().Method2()

同样在方法内部,在调用期间将对象本身传递给另一个函数会很有用.



5> Mark Renouf..:

另一个有用的方法(虽然很少使用)是声明方法参数final:

以下块将无法编译,从而立即提醒您错误:

  public Example(final int j, final int k) {
       j = j;
       k = k;
  }

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有