何时在Java中使用"this"

use*_*044 6 java this

我为我的琐碎而且可能是愚蠢的问题道歉,但是在使用方法或访问某些内容时何时使用"this"前缀我感到有点困惑.

例如,如果我们在这里查看#4:http: //apcentral.collegeboard.com/apc/public/repository/ap_frq_computerscience_12.pdf

我们在这里查看解决方案:http: //apcentral.collegeboard.com/apc/public/repository/ap12_computer_science_a_q4.pdf

我们看到a)部分的一个解决方案是

public int countWhitePixels() { 
int whitePixelCount = 0; 
    for (int[] row : this.pixelValues) { 
      for (int pv : row) { 
      if (pv == this.WHITE) { 
      whitePixelCount++; 
      }
     } 
   } 
return whitePixelCount; 
} 
Run Code Online (Sandbox Code Playgroud)

而另一种解决方案是

 public int countWhitePixels() { 
 int whitePixelCount = 0; 
     for (int row = 0; row < pixelValues.length; row++) { 
      for (int col = 0; col < pixelValues[0].length; col++) { 
      if (pixelValues[row][col] == WHITE) { 
      whitePixelCount++; 
     } 
   } 
 } 
 return whitePixelCount; 
} 
Run Code Online (Sandbox Code Playgroud)

这是我的问题.为什么他们使用"这个".在第一个解决方案中访问pixelValues甚至WHITE时的前缀,但不是在第二个解决方案中?我认为"这个"是隐含的,所以我说"这个"是正确的.对于第一个解决方案,根本没有必要吗?

非常感谢你的帮助 :)

gab*_*sch 6

有了this,您可以明确地引用您所在的对象实例.您只能在实例方法或初始化程序块中执行此操作,但不能在static方法或类初始化程序块中执行此操作.

什么时候需要?

仅在同名变量(局部变量或方法参数)隐藏声明的情况下.例如:

private int bar;
public void setBar(int bar) {
    this.bar = bar;
}
Run Code Online (Sandbox Code Playgroud)

这里方法参数隐藏了实例属性.

当编码员习惯使用它?

为了提高可读性,通常的做法是程序员this.在访问实例属性之前添加限定符.例如:

public int getBar() {
    return this.bar;
    // return bar;  // <-- this is correct, too
}
Run Code Online (Sandbox Code Playgroud)

  • +1包括"可读性".我认为代码可读性不够强调.在示例(一个简单的访问器方法)中,它可能有点过分,但在很多情况下它确实极大地提高了可读性. (2认同)

tia*_*anz 1

当方法参数的名称与类数据成员之一相同时;然后,要引用数据成员,您必须放在this.它前面。例如,在函数中setA()

public void setA(int a)
{
    this.a = a;
}
Run Code Online (Sandbox Code Playgroud)

由于方法的数据成员和参数都被命名为a,要引用数据成员,您必须使用this.a。在其他情况下,则不需要。

而且,就您而言,我认为没有必要使用this,尽管使用它没有什么坏处。