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

Tom*_*Tom 4 java methods static object non-static

由于我们不能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;
}
Run Code Online (Sandbox Code Playgroud)

所以Swap()将工作,即使对象内的变量不是静态的。我不明白这部分。希望能有所帮助。TIA!

Era*_*ran 7

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

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

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

public void swap() {
    int holder;
    holder = this.x;
    this.x = this.y;
    this.y = holder;
}
Run Code Online (Sandbox Code Playgroud)