Подтвердить что ты не робот

Почему мы не можем использовать ключевое слово 'this' в статическом методе

class Sub {
    static int y;
    public static void foo() {
         this.y = 10;
    }
}

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

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

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

4b9b3361

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

Ответ 3

Основная причина, по которой мы не можем использовать "this" в контексте статического метода: -

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

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

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

Ответ 4

Чтобы заставить ваш код работать, напишите его следующим образом:

class Sub {
    static int y;
    public static void foo() {
         Sub.y = 10;
    }
}

Вы можете установить статические поля в статических методах, но у вас нет доступа к this в статическом методе, потому что this представляет текущий экземпляр объекта, а в статическом методе у вас нет экземпляра.

Ответ 5

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

Ответ 6

Ключевое слово "this" относится к объекту, с которым вы работаете. В вашем случае это внутри любых нестатических методов или конструкторов (если у вас есть один и, если вы используете "this" внутри этого), то "this" относится к этому конкретному экземпляру класса Sub.So, это применимо только тогда, когда объект создается. Но что-либо в статическом контексте класса, вы можете использовать, даже не создавая для него объект, поскольку он разрешен во время загрузки класса. "this" разрешен только при создании объекта (вы можете даже сказать динамически, для какого объекта). Поэтому "this" имеет смысл в статическом контексте. Надеюсь, поможет. Да благословит Бог.

Ответ 7

"this" ключевое слово применимо только там, где создается экземпляр объекта. И в статическом методе экземпляр не создается, потому что статический метод относится к области класса.