为什么我们不能在静态方法中使用“this”关键字
class Sub {
static int y;
public static void foo() {
this.y = 10;
}
}
我知道它表示调用该方法的对象,并且静态方法不绑定到任何对象。但在上面提到的情况下,变量y也是静态的。this
如果我们可以在类对象上调用静态方法,为什么我们不能允许静态方法设置类的静态变量。
此附加约束的目的是什么?
class Sub {
static int y;
public static void foo() {
this.y = 10;
}
}
我知道它表示调用该方法的对象,并且静态方法不绑定到任何对象。但在上面提到的情况下,变量y也是静态的。this
如果我们可以在类对象上调用静态方法,为什么我们不能允许静态方法设置类的静态变量。
此附加约束的目的是什么?
因为是指对象实例。静态方法的调用中没有对象实例。但是,当然,您可以访问静态字段(仅限静态字段!只需使用this
class Sub {
static int y;
public static void foo() {
y = 10;
}
}
如果要确保获取静态字段而不是具有相同名称的局部变量,请使用类名指定:y
class Sub {
static int y;
public static void foo(int y) {
Sub.y = y;
}
}
我们不能在静态方法上下文中使用“this”的主要原因:
这个 :- “this” 表示当前类 OBJECT ,所以很明显,一旦我们打算创建该类的对象,“this”才会出现在图片中。
静态方法:- 无需创建对象即可使用静态方法。意味着“实例”或对象创建与Java规则的“静态”没有任何意义。
所以会有矛盾,如果我们一起使用两者(静态和这个)。这就是我们不能在静态方法中使用“this”的原因。