это неявный указатель на себя. Проще говоря, какой объект вызывает метод, в котором это находится, то это и есть тот объект.
Пример кода: TestThis_1.java
Скопируйте код кода следующим образом:
/* Вопрос: Что это
* Результат вывода:
* А@4e44ac6a
*/
общественный класс TestThis_1 {
public static void main(String[] args) {
А аа = новый А();
System.out.println(aa.f()); //aa.f(), возвращает ссылку (указатель) объекта aa
}
}
класс А {
общественный А f() {
return this; //Вернем ссылку на объект класса A объекта, который вызывает метод f().
}
}
Обычное использование этого
1. Различать переменные с одинаковым именем
Пример кода: TestThis_2.java
Скопируйте код кода следующим образом:
/* Обычное использование этого 1: различать переменные с одинаковым именем
* Результат вывода:
* это.
* я = 33
*/
общественный класс TestThis_2 {
public static void main(String[] args) {
Ааа = новый А(33);
}
}
класс А {
public int i = 1; //Это переменная-член
/*Примечание. Обычно конструктор пишется не так, конструктор предназначен главным образом для инициализации, а написан так — главным образом для простоты понимания*/
public A(int i) { //Это i — локальная переменная
System.out.printf("this. i = %d/n", this.i); //this.i относится к переменной-члену i самого объекта
System.out.printf("i = %d/n", i); //i здесь — локальная переменная i
}
}
2. Взаимные вызовы между конструкторами
Пример кода: TestThis_3.java
Скопируйте код кода следующим образом:
/* Обычное использование этого варианта 2: вызов друг друга в конструкторе */
общественный класс TestThis_3 {
public static void main(String[] args) {
}
}
класс А {
интервал я, j, к;
общественный А (интервал я) {
это.я = я;
}
общественный A (int i, int j) {
/* i = 3; error Если не закомментировать, будет сообщено об ошибке: При вызове конструктора с помощью this(...) его можно поместить только в первое предложение.
* TestThis_3.java:20: ошибка: вызов этого должен быть первым оператором в конструкторе.
* это(я);
* ^
*1 ошибка
*/
это (я);
this.j = j;
}
public A(int i, int j, int k) {
это (я, j);
это.к = к;
}
}
На что следует обратить внимание
Методы, модифицированные static, не имеют этого указателя. Поскольку метод, модифицированный static, является общедоступным, невозможно сказать, какому конкретному объекту он принадлежит.
Пример кода: TestThis_4.java
Скопируйте код кода следующим образом:
/*Внутри статического метода нет этого указателя*/
общественный класс TestThis_4 {
public static void main(String[] args) {
}
}
класс А {
статический A f() {
верните это;
/* Сообщение об ошибке: TestThis_4.java:10: ошибка: нестатическая переменная, на нее нельзя ссылаться из статического контекста.
* вернуть это;
* ^
*1 ошибка
*/
}
}