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

标签 java object methods static 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;
}

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

最佳答案

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

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

在您的 swap 示例中,如果该方法不是 static,您可以删除 acc 参数并在this 的实例变量:

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

关于java - 通过对象在静态方法上使用非静态变量? java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55215700/

相关文章:

ruby - protected 和私有(private)方法

Java swing JTable 在使用 JScrollPane 时不显示滚动条

java - Play Framework 2.2 : How to define an ebean ManyToMany query

Javascript:按值过滤对象并返回新对象(不是数组)

javascript - 如何使用纯 JavaScript 访问最内层的双重嵌套数组/对象?

java - 冒泡排序法+里面的排列法

java - POI 3.2 Excel 文件数据丢失

java - 从 jar 运行时出错 - 反射 class.forname 异常

javascript - 单击对象数组中的一个值将返回另一个键 AngularJS 的值

iphone - 在 Objective C (iPhone) 中正确声明委托(delegate)