java - "this"对象与非静态对象

标签 java static this instance

考虑一下:

public class Test {

    public static int numberOfInstances = 0;
    public int myInstanceID;
    public String myInstanceName;

静态变量不需要在实例中调用,它在任何地方都可用,如下所示:

Test.numberOfInstances

创建实例时,我只在构造函数中执行此操作:

public Test(int id, String name) {
    myInstanceID = id;
    myInstanceName = name;
    numberOfInstances += 1;
}

我最近发现了 this 关键字并注意到了它的一些用途:

public Test() {
    this(numberOfInstances + 1, "newInstance");
    numberOfInstances += 1;
}

据我所知,this 关键字允许您调用该类的另一个构造函数。它还允许您执行以下操作:

public Test(int x, int y) {
    this.x = x;
    this.y = y;
}

对于java,我非常不同意这种风格;相同的变量名,而且我看不出使用 this 的意义,特别是在查看 docs 之后例子。我看这个:

public Test(int a, int b) {
    x = a;
    y = b;

但是,没有必要使用 this 关键字;在我的代码中,我的类中有一个变量(例如 xCooperative),其中我不使用 this 关键字(它不是静态的)。

我一直在努力理解非静态变量和 this 变量之间的区别。有区别吗?在我的一门课(乒乓球桨)中,我有这个:

public class Pong {
    public int xCoordinate;
    public int yCoordinate;

等等... 我从不在任何地方使用 this 关键字,并且数据存储在它自己的实例中。

底线,我的问题是非静态变量和 this. 变量之间有什么区别。这是标准的编码实践吗?为什么我要在非静态变量上使用 this 关键字?

最佳答案

我想你可能已经回答了你自己的问题了。您提供了该功能

public Test(int x, int y) {
    this.x = x;
    this.y = y;
}

但是,如果你这样写,你认为会发生什么?

public Test(int x, int y) {
    x = x;
    y = y;
}

注意到我删除了第二个函数中的 this 。因此,xy 仅引用本地 xy 变量。 this 允许您指定您确实想要使用非静态类变量 xy

关于java - "this"对象与非静态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29679339/

相关文章:

java - GridBag/面板显示

java - 导入或实现可重用的静态数据?

javascript - `this` 绑定(bind)和 `this` 的调用站点

java获取静态方法的类名

static - 如何设置静态表中单元格的背景颜色 swift Xcode 6

javascript - 如何检查javascript的构造

javascript - $(this).parent().attr ('id' ) 获取 '[object window]' 而不是元素 ID

java - java中静态实用程序类的缺点?

java - 如何将 ListView 转换为任何类型的简单水平滚动条?

java - 在 Java 中将 float 数组类型转换为 Shorts 数组