Я понимаю, что он используется для идентификации переменной параметра (с помощью this.something), если у нее одно имя с глобальной переменной.
Однако я не знаю, каково реальное значение this в Java и что произойдет, если я использую this без точки (.).
Переведено автоматически
Ответ 1
this относится к текущему объекту.
Каждый нестатический метод выполняется в контексте объекта. Итак, если у вас есть класс, подобный этому:
publicclassMyThisTest { privateint a;
publicMyThisTest() { this(42); // calls the other constructor }
publicMyThisTest(int a) { this.a = a; // assigns the value of the parameter a to the field of the same name }
publicvoidfrobnicate() { inta=1;
System.out.println(a); // refers to the local variable a System.out.println(this.a); // refers to the field a System.out.println(this); // refers to this entire object }
public String toString() { return"MyThisTest a=" + a; // refers to the field a } }
Затем вызов frobnicate() on new MyThisTest() выведет
1 42 MyThisTest a=42
Настолько эффективно вы используете его для множества целей:
уточните, что вы говорите о поле, когда есть также что-то еще с тем же именем, что и поле
относится к текущему объекту в целом
вызовите другие конструкторы текущего класса в вашем конструкторе
Ответ 2
Следующее является копией и вставкой из здесь, но очень хорошо объясняет все различные варианты использования this ключевого слова:
Определение: Ключевое слово Java this используется для ссылки на текущий экземпляр метода, в котором оно используется.
Ниже приведены способы использования этого:
Специально для обозначения того, что переменная экземпляра используется вместо статической или локальной переменной. То есть,
Здесь это относится к переменной экземпляра. Здесь у локальной переменной высокий приоритет. Следовательно, отсутствие this обозначает локальную переменную. Если локальная переменная, являющаяся именем параметра, не совпадает с переменной экземпляра, то независимо от того, this используется она или нет, она обозначает переменную экземпляра.
Это вызывает конструктор того же класса java, который имеет два параметра.
this используется для передачи текущего экземпляра java в качестве параметра
obj.itIsMe(this);
Аналогично приведенному выше, это также может быть использовано для возврата текущего экземпляра
CurrentClassName startMethod() { returnthis; }
Примечание: Это может привести к нежелательным результатам при использовании во внутренних классах в двух приведенных выше пунктах. Поскольку это будет относиться к внутреннему классу, а не к внешнему экземпляру.
this может использоваться для получения дескриптора текущего класса
ClassclassName=this.getClass(); // this methodology is preferable in java
Хотя это можно сделать с помощью
ClassclassName= ABC.class; // here ABC refers to the class name and you need to know that!
Как всегда, this связано с его экземпляром, и это не будет работать в статических методах.
Ответ 3
Для полноты, this также может использоваться для обозначения внешнего объекта
Это относится к текущему экземпляру определенного объекта, поэтому вы могли бы написать что-то вроде
public Object getMe() { returnthis; }
Распространенным вариантом использования this является предотвращение затенения. Возьмем следующий пример:
publicclassPerson { privatefinal String name;
publicPerson(String name) { // how would we initialize the field using parameter? // we can't do: name = name; } }
В приведенном выше примере мы хотим присвоить члену поля значение параметра. Поскольку у них одно и то же имя, нам нужен способ различать поле и параметр. this позволяет нам получить доступ к элементам этого экземпляра, включая поле.