通过对象在静态方法上使用非静态变量? Java的

问题描述 投票:4回答:2

既然我们不能在静态方法中使用this,而且我们也不能使用非静态变量,为什么我们可以使用在静态方法中使用非静态变量的对象呢?

这就是我的意思:

public int x;
public int y;

public Account(int a, int b) {
    this.x = a;
    this.y = b;
}

public static void Swap(Account acc) {
    int holder;
    holder = acc.x;
    acc.x = acc.y;
    acc.y = holder;
}

所以Swap()会起作用,即使对象内部的变量不是静态的。我不明白这一部分。会感激一些帮助。 TIA!

java object methods static non-static
2个回答
7
投票

static方法无法访问当前(this)实例的实例变量,因为在它们的上下文中不存在这样的实例。

但是,如果向它们传递对实例的引用,则它们可以访问对它们可见的任何实例变量和方法。

如果您的swap示例,如果该方法不是static,您可以删除acc参数并对this的实例变量进行操作:

public void swap() {
    int holder;
    holder = this.x;
    this.x = this.y;
    this.y = holder;
}

1
投票

您不能在静态方法中使用this,因为Java不知道您引用的是哪个实例(这个)。

您可以将对象的引用作为参数acc传递给静态方法,因为调用者指定要传递的实例。

当你的静态方法引用acc时,Java知道你的意思。因此,您可以使用acc的任何可访问的字段或方法。

© www.soinside.com 2019 - 2024. All rights reserved.