为什么我们不能在静态方法中使用“this”关键字

2022-08-31 23:53:13
class Sub {
    static int y;
    public static void foo() {
         this.y = 10;
    }
}

我知道它表示调用该方法的对象,并且静态方法不绑定到任何对象。但在上面提到的情况下,变量y也是静态的。this

如果我们可以在类对象上调用静态方法,为什么我们不能允许静态方法设置类的静态变量。

此附加约束的目的是什么?


答案 1

因为是指对象实例。静态方法的调用中没有对象实例。但是,当然,您可以访问静态字段(仅限静态字段!只需使用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;
    }
}

答案 2

我们不能在静态方法上下文中使用“this”的主要原因:

这个 :- “this” 表示当前类 OBJECT ,所以很明显,一旦我们打算创建该类的对象,“this”才会出现在图片中。

静态方法:- 无需创建对象即可使用静态方法。意味着“实例”或对象创建与Java规则的“静态”没有任何意义。

所以会有矛盾,如果我们一起使用两者(静态和这个)。这就是我们不能在静态方法中使用“this”的原因。