this — це спеціальне ключове зарезервоване слово Java, яке містить посилання на поточний екземпляр класу. В цій нотатці буде розглянуто приклади використання this:
- звернення до змінних екземпляру (instance variables)
- виклик конструктора класу
- повернення методом поточного екземпляра класу
Звернення до змінних екземпляру (instance variables)
Один з прикладів використання this в Java, звернення до змінних екземпляра класу (instance variables). Це потрібно у випадках, коли в поточному блоці імена змінних екземпляру, перекриваються локальними змінними з аналогічними іменами. Приклад:
public class User {
private String fullName;
public void setFullName() {
String fullName = "Вернигора Валентин Григорович";
this.fullName = "Думенко Володимир Олегович";
System.out.println("Full name local variable: " + fullName);
System.out.println("Full name instance variable: " + this.fullName);
}
}- клас User містить змінну екземпляру fullName
- метод setFullName містить локальну змінну з таким самим ім’ям fullName
- для звернення до змінної екземпляру, потрібно використати ключове слово this (синтаксис this.<instance_variable_name>)
Виклик setFullName:
public class Main {
public static void main(String[] args) {
User user = new User();
user.setFullName();
}
}Результат:
Full name local variable: Вернигора Валентин Григорович
Full name instance variable: Думенко Володимир ОлеговичНотатка про instance variables в Java:
Що таке instance variables в Java
Виклик конструктора класу
Наступний приклад використання this – виклик конструктора класу, всередині іншого конструктора цього ж класу. Можна викликати конструктор без аргументів або з аргументами, передавши відповідні параметри. Приклад:
public class User {
private String firstName;
private String lastName;
private String citizenship;
public User(String firstName, String lastName) {
this(firstName, lastName, "Україна");
}
public User(String firstName, String lastName, String citizenship) {
this.firstName = firstName;
this.lastName = lastName;
this.citizenship = citizenship;
}
@Override
public String toString() {
return "User{" +
"firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", citizenship='" + citizenship + '\'' +
'}';
}
}- клас User містить два конструктори, з двома та трьома параметрами
- конструктор з двома параметрами за допомогою this, робить виклик конструктора з трьома параметрами
- при створенні об’єкту User, викликом конструктора з двома параметрами, поле citizenship буде проініціалізовано значенням за замовчуванням
Перевірка роботи класу User:
public class Main {
public static void main(String[] args) {
User user = new User("Віталій", "Дмитренко");
System.out.println(user);
}
}Результат:
User{firstName='Віталій', lastName='Дмитренко', citizenship='Україна'}Повернення методом поточного екземпляра класу
Метод має можливість повертати поточний екземпляр класу. Робиться це за допомогою return this. Це дає змогу створювати ланцюжки викликів і замість:
object.method1();
object.method2();
object.method3();Писати:
object.method1().method2().method3();Приклад:
public class User {
private String firstName;
private String lastName;
private String citizenship;
public User setFirstName(String firstName) {
this.firstName = firstName;
return this;
}
public User setLastName(String lastName) {
this.lastName = lastName;
return this;
}
public User setCitizenship(String citizenship) {
this.citizenship = citizenship;
return this;
}
public void printData() {
System.out.printf("%s %s %s%n", firstName, lastName, citizenship);
}
}Робота з об’єктом класу User:
public class Main {
public static void main(String[] args) {
User user = new User();
user.setFirstName("Віктор")
.setLastName("Криворучко")
.setCitizenship("Україна")
.printData();
}
}Результат:
Віктор Криворучко Україна