7

我为我的微不足道且可能很愚蠢的问题道歉,但我对在使用方法或访问某些东西时何时使用“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; 
} 

而另一个解决方案是

 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; 
} 

这是我的问题。为什么他们使用“这个”。在第一个解决方案中访问 pixelValues 甚至 WHITE 时的前缀,但不是在第二个解决方案中?我认为“这个”是隐含的,所以我说“这个”是否正确。第一个解决方案根本不需要?

非常感谢你的帮助 :)

4

4 回答 4

6

使用this,您可以显式引用您所在的对象实例。您只能在实例方法或初始化程序块中执行此操作,但不能在static方法或类初始化程序块中执行此操作。

你什么时候需要这个?

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

private int bar;
public void setBar(int bar) {
    this.bar = bar;
}

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

编码员什么时候使用它?

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

public int getBar() {
    return this.bar;
    // return bar;  // <-- this is correct, too
}
于 2013-05-01T01:03:02.423 回答
4

来自Java™ 教程

将其与字段一起使用

使用 this 关键字的最常见原因是字段被方法或构造函数参数遮蔽。

例如,Point 类是这样写的

public class Point {
    public int x = 0;
    public int y = 0;

    //constructor
    public Point(int a, int b) {
        x = a;
        y = b;
    }
}

但它可能是这样写的:

public class Point {
    public int x = 0;
    public int y = 0;

    //constructor
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}
于 2013-05-01T01:04:19.957 回答
1

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

public void setA(int a)
{
    this.a = a;
}

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

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

于 2013-05-01T00:48:40.337 回答
0

this引用类本身的实例。例子:

private String name, car;

public class Car(String name, String color)
{
    this.name = name;
    this.color = color;
}
于 2013-05-01T00:59:02.877 回答