Ключевое слово this
Ключевое слово this - это ссылка на текущий объект,
то есть на тот объект, в контексте которого выполняется
метод или конструктор. Чаще всего this используют,
чтобы обратиться к полю класса, когда имя параметра метода
или конструктора совпадает с именем этого поля. Также
this позволяет вызвать один конструктор из другого
внутри того же класса и передать текущий объект в качестве
аргумента в другой метод.
Синтаксис
this.field // обращение к полю текущего объекта
this.method() // вызов метода текущего объекта
this() // вызов другого конструктора класса
this(args) // вызов конструктора с аргументами
Пример
Давайте разберём ситуацию, когда имя параметра конструктора
совпадает с именем поля класса. Без this параметр
«затенит» поле, и присваивание не сработает:
public class Main
{
public static void main(String[] args)
{
User user = new User("John", 25);
System.out.println(user.name);
System.out.println(user.age);
}
}
class User
{
String name;
int age;
User(String name, int age)
{
this.name = name;
this.age = age;
}
}
Результат выполнения кода:
"John"
25
Пример
Давайте вызовем один конструктор из другого с помощью
this. Это позволяет избежать дублирования кода
инициализации:
public class Main
{
public static void main(String[] args)
{
User user = new User("John");
System.out.println(user.name);
System.out.println(user.age);
}
}
class User
{
String name;
int age;
User(String name)
{
this(name, 18);
}
User(String name, int age)
{
this.name = name;
this.age = age;
}
}
Результат выполнения кода:
"John"
18
Пример
Давайте передадим текущий объект в другой метод с помощью
this. Так один объект может сослаться на самого себя:
public class Main
{
public static void main(String[] args)
{
User user = new User("John");
user.printSelf();
}
}
class User
{
String name;
User(String name)
{
this.name = name;
}
void printSelf()
{
Printer.print(this);
}
}
class Printer
{
static void print(User user)
{
System.out.println("User: " + user.name);
}
}
Результат выполнения кода:
"User: John"