通过对象在静态方法上使用非静态变量? Java
Using a non static variable on a static method through an object? Java
既然我们不能在静态方法中使用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
参数并对 [=12= 的实例变量进行操作]:
public void swap() {
int holder;
holder = this.x;
this.x = this.y;
this.y = holder;
}
您不能在静态方法中使用 this
,因为 Java 不知道您指的是哪个实例(哪个 this)。
您可以将对对象的引用作为参数acc
传递给静态方法,因为调用者指定要传递的实例。
Java 知道当你的静态方法引用 acc
时你指的是哪个实例。因此,您可以使用 acc
.
的任何可访问字段或方法
既然我们不能在静态方法中使用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
参数并对 [=12= 的实例变量进行操作]:
public void swap() {
int holder;
holder = this.x;
this.x = this.y;
this.y = holder;
}
您不能在静态方法中使用 this
,因为 Java 不知道您指的是哪个实例(哪个 this)。
您可以将对对象的引用作为参数acc
传递给静态方法,因为调用者指定要传递的实例。
Java 知道当你的静态方法引用 acc
时你指的是哪个实例。因此,您可以使用 acc
.