Вопрос-ответ

Why can't we use 'this' keyword in a static method

Почему мы не можем использовать ключевое слово "this" в статическом методе
class Sub {
static int y;
public static void foo() {
this.y = 10;
}
}

Я понимаю, что this представляет объект, вызывающий метод, и что статические методы не привязаны ни к какому объекту. Но в вышеупомянутом случае переменная y также статична.

Если мы можем вызывать статический метод для объекта класса, почему мы не можем разрешить статическим методам устанавливать статические переменные класса.

Какова цель этого дополнительного ограничения?

Переведено автоматически
Ответ 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" означает текущий объект класса , поэтому ясно, что "this" появляется на картинке только тогда, когда мы намеревались создать объект этого класса.

статический метод: - нет необходимости создавать объект, чтобы использовать статический метод. означает, что "экземпляр" или создание объекта не имеет никакого смысла со "статическим" согласно правилу Java.

Таким образом, возникло бы противоречие, если бы мы использовали оба вместе (static и this) . Именно по этой причине мы не можем использовать "this" в статическом методе.

Ответ 3

this ссылается на этот экземпляр объекта Sub. Поскольку метод является static, экземпляра Sub не существует.

Ответ 4

Это означает "этот" объект, но его нет. В вашем случае вы можете использовать имя класса, как предлагает @tibtof .

java oop