Я посмотрел на Why can't I use the keyword "this" when referring to fields in static methods?Каков реальный смысл «этого» в Java?
и подумал, что доступ к статическим членам через эталонную переменную в порядке, но с использованием this
для доступа к таким членам не в порядке. Посмотрите на код ниже.
static int month;
public static void setMonth(int x)
{
Date date = new Date();
date.month = x; //fine, why ?
this.month = x; //compiler error, why ?
}
Это ясно показывает, что this
не то же самое в качестве опорной переменной. Если это так, то что это на самом деле? Мне нужно понять истинный смысл this
, чтобы понять, почему он не может быть доступен из статического контекста.
Пожалуйста, не указывайте ссылки на случайные блоги или учебные пособия по oracle, в которых говорится, что this
не может использоваться из статического контекста - я уже это знаю. Я хочу посмотреть дальше этого и понять, почему его нельзя использовать.
код в связанном вопросе -
public class Date
{
static int month;
public static void setMonth(int x)
{
this.month = x; //compiler error
}
public static int getMonth()
{
return month; //compiles just fine, no error
}
}
Нет никакого «этого» в чем-либо статичном, поскольку вы имеете дело с классом, а не с экземпляром класса. 'this' относится только к экземпляру. – tjb1982
'this' относится к * текущему экземпляру * этого класса. В статическом контексте по определению не существует текущего экземпляра класса. В результате «this' нельзя вызывать в статическом контексте. – Vulcan